从另一个 url 处理程序写入龙卷风中的 websockets 列表
Write to a list of websockets in tornado from another url handler
我正在创建一个具有 websocket 处理程序的 web 应用程序。在每次成功连接时,我都会将 websocket 处理程序对象附加到列表中。
另一个名为 PostResultHandler 的处理程序 class 接受 POST 数据。此 PostResultHandler 将由发送 json 数据的后台进程调用。一旦 PostResultHandler 收到此 json 数据,我想写入 websockets 列表。
目前我只是遍历 websockets 列表并将 json 数据写入其中。但我认为这可能是一个阻塞调用,调用 PostResultHandler 的后台进程将被阻塞,直到结果写入所有 websockets。
有没有办法让这段代码非阻塞,让后台进程保持运行没有任何延迟
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)
这是不是阻塞调用。该消息会立即在服务器上进行缓冲,您的代码会继续执行。
最好的选择是在 ioloop 上添加回调以发送每个 websocket 处理程序实例的数据。您可以执行以下操作。
tornado.ioloop.IOloop.instance().add_callback(partial(websocket_handler_instance.write_message, msg))
我正在创建一个具有 websocket 处理程序的 web 应用程序。在每次成功连接时,我都会将 websocket 处理程序对象附加到列表中。 另一个名为 PostResultHandler 的处理程序 class 接受 POST 数据。此 PostResultHandler 将由发送 json 数据的后台进程调用。一旦 PostResultHandler 收到此 json 数据,我想写入 websockets 列表。
目前我只是遍历 websockets 列表并将 json 数据写入其中。但我认为这可能是一个阻塞调用,调用 PostResultHandler 的后台进程将被阻塞,直到结果写入所有 websockets。
有没有办法让这段代码非阻塞,让后台进程保持运行没有任何延迟
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)
这是不是阻塞调用。该消息会立即在服务器上进行缓冲,您的代码会继续执行。
最好的选择是在 ioloop 上添加回调以发送每个 websocket 处理程序实例的数据。您可以执行以下操作。
tornado.ioloop.IOloop.instance().add_callback(partial(websocket_handler_instance.write_message, msg))