使用Python瓶/geventwebs检测Websocket何时断开连接

2024-04-23 17:58:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是gevent-websocket模块和BottlePython框架。在

当客户端关闭浏览器时,此代码

$(window).on('beforeunload', function() { ws.close(); });

帮助正确关闭websocket连接。在

但是,如果客户端的网络连接被中断,则不会向服务器发送“关闭”信息。在

然后,通常,甚至在1分钟后,服务器仍然认为客户端已连接,而websocket在服务器上仍然是打开的。在

问题:如何正确检测websocket是否因为客户端与网络断开而关闭?

Python/Bottle/gevent websocket中是否有websocket KeepAlive特性?


来自Web Socket: cannot detect client connection on internet disconnect的一个答案建议每隔x秒使用一个心跳/ping包来告诉服务器“我还活着”。另一个答案是建议使用setKeepAlive(true).特性。此功能是否在gevent-websocket中可用?在


示例服务器代码,taken from here

^{pr2}$

Tags: 模块答案代码服务器框架客户端on浏览器
1条回答
网友
1楼 · 发布于 2024-04-23 17:58:19

首先需要向receive()方法添加一个超时。在

with gevent.Timeout(1.0, False):
    msg = ws.receive()

这样循环就不会阻塞,如果你发送了一个空包而客户机没有响应,就会抛出WebsocketError,你可以关闭这个套接字。在

相关问题 更多 >