Tornado Python 如何处理客户端连接丢失

Posted

技术标签:

【中文标题】Tornado Python 如何处理客户端连接丢失【英文标题】:How Tornado Python handles drop of client connections 【发布时间】:2016-04-20 16:45:36 【问题描述】:

我正在构建一个 Tornado websocket 应用程序来节省用户在 sql 表中的生存时间......我可以看到如果客户端连接断开(javascript 客户端)从服务器端没有任何反应......我想知道如何处理这个.

提前致谢

【问题讨论】:

嗨。当客户端断开连接时,您是否从 WebSocketHandler 调用了def on_close(self): 【参考方案1】:

tornado websocket 处理程序中有一个 on_close 方法,将在连接关闭时调用:

class WSHandler(tornado.websocket.WebSocketHandler):
    def check_origin(self, origin):
        return True

    def open(self, poll_id):
        print 'new connection'

    def on_message(self, message):
        print 'message received %s' % message

    def on_close(self):
        print 'connection closed'

    def send_message(self, msg):
        self.write_message(msg)

【讨论】:

我知道.. 但是 on_close 方法不能处理来自客户端的网络连接丢失...如果我从我的一个客户端拔下网络电缆,websocket 连接似乎仍然打开.. id 喜欢知道如何处理。 无法保证系统会检测到未使用的网络连接的问题。您需要偶尔使用连接(使用 WebSocketHandler.ping)才能检测到失败的连接。 好吧,我虽然 ping 是正确的方式,但 javascript api 不处理 ping pong 请求,所以我应该将消息发送为“ping”吗?我坚持这一点

以上是关于Tornado Python 如何处理客户端连接丢失的主要内容,如果未能解决你的问题,请参考以下文章

dubbo在丢数据包时如何处理消息

如果连接关闭,我该如何处理连接并重新连接?

flask 源码浅析(flask 如何处理请求(多线程,多进程,IO多路复用))

Nginx如何处理一个连接

Android多人国际象棋 - 如何处理服务器连接?

Python:如何处理 https 连接被拒绝错误并将日志写入服务器