所以,我正在使用永久框架将数据从Tornado传输到JavaScript客户端应用程序,我发现JavaScript客户端偶尔会停止接收数据。我已经实现了一个心跳方法,客户端将更改帧的URL以在错过心跳时重新打开连接,但这感觉就像一个尴尬的黑客 - 并且有一定数量的设置和拆除必须连接刷新时在应用程序UI中发生。我真的更喜欢它是否可以成为整个使用会话的持久连接。
有时这是每隔几分钟就会发生一次,有时候它似乎每隔五秒就会进入一个循环。我的浏览器是Firefox和Chrome。
什么样的事情会导致这个问题?我真的只需要一些关于调试起点的想法 - 我应该关注延迟,数据泛滥,连接错误吗?问题更可能是在Tornado结束还是JavaScript结束?或者,我是否会更好地投入精力让JavaScript应用程序能够更优雅地重新初始化自己?
答案 0 :(得分:0)
啊哈。我想通了。龙卷风does poorly with concurrency。问题是我的逻辑是从多个线程(由入站RPC触发)调用长期存在的RequestHandler实例,当它们发生冲突时,Tornado会吓坏并关闭连接。
修复是使用add_callback将我与IOLoop线程上的RequestHandler实例的交互排队:
tornado.ioloop.IOLoop.instance()。add_callback(do_stuff)