在 Tornado 中使用 WebSocket 推送消息给客户端需要通过 WebSocket 连接来实现。下面是一个简单的示例,演示如何使用 Tornado 的 WebSocketHandler 向客户端推送消息:
import tornado.ioloop
import tornado.web
import tornado.websocket
# WebSocketHandler 类处理 WebSocket 连接
class WebSocketHandler(tornado.websocket.WebSocketHandler):
connections = set()
# 当有新的 WebSocket 连接建立时,将连接添加到连接集合中
def open(self):
self.connections.add(self)
print("New WebSocket connection established")
# 当收到消息时,将消息发送给所有连接的客户端
def on_message(self, message):
print("Received message:", message)
self.send_message_to_all_clients(message)
# 当连接关闭时,将连接从连接集合中移除
def on_close(self):
self.connections.remove(self)
print("WebSocket connection closed")
# 将消息发送给所有连接的客户端
def send_message_to_all_clients(self, message):
for connection in self.connections:
connection.write_message(message)
# 创建应用程序并定义 WebSocket 路由
app = tornado.web.Application([
(r'/websocket', WebSocketHandler),
])
if __name__ == '__main__':
# 启动应用程序
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
在上面的示例中,我们定义了一个 WebSocketHandler
类,继承自 tornado.websocket.WebSocketHandler
。在 open()
方法中,我们将新的 WebSocket 连接添加到 connections
集合中。在 on_message()
方法中,我们接收到客户端发送的消息,并调用 send_message_to_all_clients()
方法将消息发送给所有连接的客户端。在 on_close()
方法中,我们将关闭的连接从 connections
集合中移除。
我们创建了一个 Tornado 应用程序并指定了 WebSocket 路由。在 app.listen()
中指定了服务器的端口。
启动应用程序后,可以使用 WebSocket 客户端与服务器建立连接,并发送消息。服务器将收到消息并将其发送给所有连接的客户端。
请注意,上面的示例仅演示了基本的消息推送功能,还可以根据需要进行扩展,例如添加用户验证、单播消息等。