欢迎访问宙启技术站
智能推送

使用TornadoWebSocket实现实时通信

发布时间:2023-12-28 06:48:09

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实例,页面上会实时显示新的消息。