Tornado异步请求超时 - 如何检查用户是否仍然连接

1 投票
1 回答
1056 浏览
提问于 2025-04-17 06:39

我正在用Tornado编写一个网页聊天程序。

用户发送一个很长的请求,在这个过程中我会给他发送消息作为回应。但是,我在检查用户是否在线时遇到了问题。

当用户注销或者直接关闭标签页/浏览器时,这个情况很好处理,执行 on_connection_close() 就能知道用户已经断开连接。但是如果用户失去了网络连接,那么on_connection_close 就不会被触发

我该如何检查用户是否在线呢?

1 个回答

0

你可以看看 tornadio2,这是一个结合了Tornado和Socket.io的项目,还有 实现多路复用连接 的例子,一个用来处理推送消息,另一个用来定期检查服务器,这样你就能知道客户端是否还连接着。

多路复用并不是打开多个连接,而是利用一个连接来虚拟地连接到不同的处理程序。你可以看看multiplexed.py文件的第66行。

class RouterConnection(SocketConnection):
    __endpoints__ = {'/chat': ChatConnection,
                 '/ping': PingConnection}

这个多路复用的例子也是一个简单的聊天应用。

撰写回答