0

因此,我使用永久帧将数据从 Tornado 流式传输到 JavaScript 客户端应用程序,我发现 JavaScript 客户端偶尔会停止接收数据。我已经实现了一种心跳方法,当心跳丢失时,客户端将更改框架的 URL 以重新打开连接,但这感觉就像一个尴尬的黑客攻击——并且有一定数量的设置和拆卸必须连接刷新时在应用程序 UI 中发生。如果它可以是整个使用会话的一个持久连接,我真的更喜欢。

有时这是每几分钟一次,有时它似乎让自己进入一个循环,每五秒发生一次。我的浏览器是 Firefox 和 Chrome。

什么样的事情会导致这个问题?我真的只需要一些想法作为调试的起点——我应该关注延迟、数据泛滥、连接不良吗?问题更可能出在 Tornado 端还是 JavaScript 端?或者,我是否会更好地投入精力使 JavaScript 应用程序能够更优雅地重新初始化自己?

4

1 回答 1

0

啊哈。我想通了。Tornado在并发方面做得很差。问题是我的逻辑是从多个线程(由入站 RPC 触发)调用长期存在的 RequestHandler 实例,当它们发生冲突时,Tornado 会崩溃并关闭连接。

解决方法是使用 add_callback 将我与 IOLoop 线程上的 RequestHandler 实例的交互排队:

tornado.ioloop.IOLoop.instance().add_callback(do_stuff)

于 2011-06-29T15:19:33.587 回答