使用TornadoWebSocket实现实时通信
TornadoWebSocket是Tornado框架中用于实现实时通信的一种方式,它基于WebSocket协议,能够提供高效、可靠的双向通信。下面是一个使用TornadoWebSocket实现实时通信的简单例子。
首先,我们需要创建一个Tornado应用,并设置好WebSocket的路由。在该例子中,我们创建一个名为Chat的应用,并设置一个用于处理WebSocket连接的路由。
import tornado.web
import tornado.websocket
class ChatWebSocketHandler(tornado.websocket.WebSocketHandler):
# 存储所有连接的WebSocket实例
connections = []
def open(self):
# 当有新的WebSocket连接时,将其添加到connections列表中
self.connections.append(self)
def on_message(self, message):
# 接收到消息时,将其发送给所有连接的WebSocket实例
for connection in self.connections:
connection.write_message(message)
def on_close(self):
# 当WebSocket连接关闭时,从connection列表中移除
self.connections.remove(self)
class Application(tornado.web.Application):
def __init__(self):
# 设置路由
handlers = [
(r"/websocket", ChatWebSocketHandler),
]
tornado.web.Application.__init__(self, handlers)
if __name__ == "__main__":
application = Application()
application.listen(8888)
tornado.ioloop.IOLoop.current().start()
在上述代码中,我们定义了一个ChatWebSocketHandler类,继承自tornado.websocket.WebSocketHandler。在该类中,我们定义了open()、on_message()和on_close()三个方法,分别用于处理新的WebSocket连接、接收到消息和WebSocket连接关闭的事件。open()方法在有新的WebSocket连接时被调用,将连接的WebSocket实例添加到connections列表中。on_message()方法在接收到消息时被调用,将消息发送给所有连接的WebSocket实例。on_close()方法在WebSocket连接关闭时被调用,将连接的WebSocket实例从connections列表中移除。
接下来,我们可以编写一个简单的HTML页面,用于发送消息并接收实时更新的消息。
<!DOCTYPE html>
<html>
<head>
<title>Chat Example</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
var socket = new WebSocket("ws://localhost:8888/websocket");
socket.onmessage = function(event) {
var message = event.data;
$('#messages').append('<li>' + message + '</li>');
};
function sendMessage() {
var message = $('#message').val();
socket.send(message);
$('#message').val('');
}
</script>
</head>
<body>
<ul id="messages"></ul>
<input type="text" id="message" placeholder="Type your message">
<button onclick="sendMessage()">Send</button>
</body>
</html>
在上述HTML代码中,我们使用了JavaScript的WebSocket对象,创建一个连接到ws://localhost:8888/websocket的WebSocket实例。当接收到新的消息时,在页面上添加一个新的列表项来显示消息内容。通过文本框输入框和发送按钮,可以发送消息给服务器。
最后,通过命令行运行Python代码,启动Tornado应用。
python example.py
在浏览器中打开HTML页面,即可进入实时通信的界面。当有新的WebSocket连接时,服务器将会收到相关的事件通知,当接收到消息时,服务器将会将消息发送给所有的WebSocket实例,页面上会实时显示新的消息。
