将 SSE 混合到 Tornado 中

Mixing SSEs into Tornado

我正在尝试将遗留 SSE 服务器 + SSE 客户端与龙卷风合并。 (从进程收集 SSE 并通过 UDP 套接字将它们分发给客户端的服务器)我们发出的第一个 SSE GET 请求运行良好。唯一的问题是当用户离开 Web 应用程序并返回时,tornado 会被锁定。 Web 应用程序永远不会加载第二次。

我有一个非异步的 RequestHandler,它使用客户端等待一段时间 True 循环从非阻塞 python UDP 套接字读取数据。然后写入这些消息,并刷新到浏览器。浏览器成功接收到 SSE。

在我的 RequestHandler 中,on_connection_close 和 on_finish 从未被调用。这些应该停止客户端,并从 while True 循环中中断。这是因为我的 get 请求不是协程吗?

在 Tornado 中执行此操作的正确方法是什么?如果确实需要,我可以展示代码片段,但问题应该是不言自明的。

经过一些实验,我自己弄明白了。

on_finish() 从未被调用,因为我需要调用 finish(),并且 on_connection_close() 从未被调用,因为它不是协程。我能够使用关键字 yield.

解决我的问题

可在此处找到更多信息:http://www.tornadoweb.org/en/stable/guide/coroutines.html