SocketIO + Flask 检测断开连接
Posted
技术标签:
【中文标题】SocketIO + Flask 检测断开连接【英文标题】:SocketIO + Flask Detect Disconnect 【发布时间】:2020-07-07 19:41:23 【问题描述】:我在这里有一个不同的问题,但我意识到它可以简化为:
您如何检测客户端何时从页面断开(关闭其页面或单击链接)(换句话说,套接字连接关闭)?我想制作一个带有更新用户列表的聊天应用程序,并且我在 Python 上使用 Flask。当用户连接时,浏览器发送一个带有事件和用户名的socket.emit()
,以告诉服务器一个新用户的存在,之后服务器将向所有客户端发送socket.emit()
,以便所有客户端都附加这个新用户用户到他们的用户列表。但是,我希望客户端也在断开连接时向服务器发送包含其用户名的消息。我无法弄清楚如何正确触发触发器。注意:我只是为页面使用了一个带有脚本标签的简单 html 文件,我不确定如何添加一个 JS 文件以与页面一起使用,但我可以弄清楚是否有必要这样做。
【问题讨论】:
【参考方案1】:想通了。 socket.on('disconnect')
确实是正确的,但默认情况下它每分钟左右只对每个用户执行一次 ping,这意味着需要很长时间才能看到该事件。
【讨论】:
这对我来说是无能为力的信息!谢谢!请添加信息如何从 1 分钟更改默认 ping 解析时间。 我也想看看你的解决方案 Socket.IO 默认使用长轮询而不是 Web 套接字(很遗憾)。这是因为 Flask 本身不能原生支持 Web 套接字(但似乎 Flask 2.0 已经采取了一些措施来改进支持)。要使用 Flask-SocketIO 运行 websocket,您需要通过服务器(例如 gunicorn)使用 eventlet 或 gevent worker 运行 Flask。 flask-socketio.readthedocs.io/en/latest/deployment.html以上是关于SocketIO + Flask 检测断开连接的主要内容,如果未能解决你的问题,请参考以下文章
Android Nkzawa SocketIO 断开连接并建立新连接
socket.io、netty-socketio、nginx 每分钟断开连接