gpt4 book ai didi

python - 如何一次向 Tornado 套接字客户端广播消息?

转载 作者:行者123 更新时间:2023-12-03 12:02:58 25 4
gpt4 key购买 nike

我正在运行一个 Tornado 应用程序,但我意识到每次套接字有一个新连接时,它都会创建服务器的新实例,而不是将新连接添加到self.connections中。由于这种行为,我不能同时向所有连接广播消息。如何使应用程序使用现有实例运行?

import asyncio
import tornado.ioloop
import tornado.web
import tornado.websocket
import tornado.wsgi
import time


class EchoWebSocket(tornado.websocket.WebSocketHandler):

def initialize(self, tornado_output_queue):
self.connections = set()

def open(self):
print("WebSocket opened")
self.connections.add(self)

def on_message(self, message):
for client in self.connections:
await client.write_message(str(time.time()))

def on_close(self):
print("WebSocket closed")

def check_origin(self, origin):
return True


def make_app():
"initializes the web server"
return tornado.web.Application([
(r"/websocket", EchoWebSocket)
])


if __name__ == "__main__":
webapp = make_app()
application = tornado.wsgi.WSGIContainer(webapp)
webapp.listen(8888)
tornado.ioloop.IOLoop.instance().start()


我已经读过 tornado.ioloop.IOLoop.currenttornado.ioloop.IOLoop.instance(我正在使用),但是文档说 .instance只是 .current的别名。

最佳答案

Tornado 为每个连接创建处理程序的新实例。要跟踪所有已连接的客户端,您必须在类上创建connections对象:

class EchoWebSocket(...):
connections = set()

关于python - 如何一次向 Tornado 套接字客户端广播消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60058778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com