我正在创建一个具有websocket处理程序的Web应用程序。在每个成功的连接上,我将websocket处理程序对象附加到列表中。 另一个名为PostResultHandler的处理程序类接受POST数据。这个PostResultHandler将由发送json数据的后台进程调用。一旦PostResultHandler接收到这个json数据,我想写入websockets列表。
目前我只是遍历websockets列表并将json数据写入其中。但我认为它可能是一个阻塞调用,调用PostResultHandler的后台进程将被阻塞,直到结果写入所有websockets。
有没有办法让这段代码无阻塞,以便后台进程能够毫不拖延地继续运行
答案 0 :(得分:1)
The Tornado examples folder includes a chat demo with websockets,它只是:
for waiter in cls.waiters:
try:
waiter.write_message(chat)
except:
logging.error("Error sending message", exc_info=True)
这是不阻止通话。消息立即在服务器上缓冲,代码继续执行。
答案 1 :(得分:0)
最好的选择是在ioloop上添加回调以发送每个websocket处理程序实例的数据。你可以做类似的事情。
tornado.ioloop.IOloop.instance()。add_callback(partial(websocket_handler_instance.write_message,msg))