如何防止我永远的框架关闭对我的连接

How to prevent my forever-frame from closing the connection on me?

本文关键字:我的 连接 框架 何防止 永远      更新时间:2023-09-26

因此,我使用一个永久帧将数据从Tornado流式传输到JavaScript客户端应用程序,我发现JavaScript客户端偶尔会停止接收数据。我已经实现了一个心跳方法,当错过心跳时,客户端会更改帧的URL以重新打开连接,但这感觉像是一个尴尬的破解——当连接刷新时,应用程序UI中必须进行一定数量的设置和拆卸。我真的更希望它可以是整个使用会话的一个持久连接。

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

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

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

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

tortory.ioloop.ioloop.instance().add_callback(do_stuff)