Tornado中静默关闭Websockets

3
我有一个nginx服务器,超时时间为一小时,并且Tornado web服务器在其后面。
当nginx关闭连接时,在Tornado中我并不知道。我看到了这个关于使用超时事件自动关闭连接的问题 (Implementing and testing WebSocket server connection timeout) ,我将使用它作为备选解决方案。
我的问题是:Tornado是否有用于WebSocket连接失效的内部机制?
1个回答

1

WebSocketHandler 有一个可重写的on_close方法,当连接关闭时应该被调用(大部分时间)。然而,由于底层网络协议的限制,该方法并不是100%可靠的,因此建议使用基于超时的备选方案。然而,Tornado没有内置支持,所以您需要自己实现它,可能类似于您链接到的答案。


也可以使用 ping (http://tornadokevinlee.readthedocs.org/en/latest/websocket.html#tornado.websocket.WebSocketHandler.ping) 来实现无超时的处理,并且能够意识到"意外关闭"的情况。 - kwarunek
实际上,我不确定底层网络协议的限制。即使在底层网络出现问题(例如服务器收到终止信号),浏览器的WebSocket也会收到onClose事件。我已经在浏览器端测试过这种情况。因此我认为这是Tornado特有的问题。 - frist
服务器收到终止信号,这并不是一个网络层面的问题。尝试拔掉以太网线。 - Ben Darnell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接