Python 如何一次向tornado套接字客户端广播消息?

Python 如何一次向tornado套接字客户端广播消息?,python,sockets,websocket,tornado,python-asyncio,Python,Sockets,Websocket,Tornado,Python Asyncio,我正在运行一个tornado应用程序,但我意识到每次有一个新的套接字连接时,它都会创建一个新的服务器实例,而不是将新连接添加到self.connections。由于这种行为,我无法同时向所有连接广播消息。如何使用现有实例运行应用程序 导入异步IO 导入tornado.ioloop 导入tornado.web 导入tornado.websocket 导入tornado.wsgi 导入时间 EchoWebSocket类(tornado.websocket.WebSocketHandler): def

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

导入异步IO
导入tornado.ioloop
导入tornado.web
导入tornado.websocket
导入tornado.wsgi
导入时间
EchoWebSocket类(tornado.websocket.WebSocketHandler):
def初始化(自我、tornado_输出_队列):
self.connections=set()
def打开(自):
打印(“打开WebSocket”)
self.connections.add(self)
def on_消息(自我,消息):
对于self.connections中的客户端:
等待客户端。写入消息(str(time.time()))
def on_关闭(自身):
打印(“WebSocket关闭”)
def检查_原点(自身、原点):
返回真值
def make_app():
“初始化web服务器”
return tornado.web.Application([
(r“/websocket”,EchoWebSocket)
])
如果名称=“\uuuuu main\uuuuuuuu”:
webapp=make_app()
application=tornado.wsgi.WSGIContainer(webapp)
webapp.listen(8888)
tornado.ioloop.ioloop.instance().start()

我读过关于
tornado.ioloop.ioloop.current
Vs
tornado.ioloop.ioloop.instance
(我正在使用),但是文档说
。instance
只是
的别名。current

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

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

虽然这在概念上是有帮助的,但我尝试了它和它的混乱;导致WebSocketClosedError大幅增加。鉴于我的服务器目前为6个以上的客户端提供数据,为什么集中连接存储会导致这么多错误?@simic0de可能是因为您正在WSGI模式下运行服务器。不建议这样做。看看这个答案:为什么要在WSGI容器中运行Tornado?如果您没有特殊的用例,请按常规方式运行Tornado。不管怎样,我只是在猜。错误的实际原因很可能是其他原因;它无法在HTTPServer上运行