SocketIO + Flask 检测断开连接

7
我之前有一个不同的问题,但后来简化成了这样:如何检测客户端断开连接(关闭页面或单击链接)(换句话说,套接字连接关闭)?我想创建一个具有更新用户列表的聊天应用程序,并在Python上使用Flask。当用户连接时,浏览器将发送带有事件和用户名的socket.emit()以告诉服务器存在新用户,此后服务器将使用socket.emit()向所有客户端发送消息,以便所有客户端都将此新用户附加到其用户列表中。但是,我还希望客户端在断开连接时也发送包含其用户名的消息给服务器。我无法弄清楚如何正确触发。注意:我只是使用带有脚本标记的简单html文件,我不确定如何添加JS文件与该页面配合,但如果必要我可以找出方法。
1个回答

7

问题解决了。 socket.on('disconnect') 是正确的,但默认情况下它每隔一分钟左右只向每个用户发送一次ping,这意味着要很长时间才能看到该事件。


这对我来说是重要的信息!谢谢!请添加如何将默认ping分辨率时间更改为1分钟的信息。 - Qbik
我也想看看你的解决方案。 - Constantine Westerink
1
Socket.IO默认使用长轮询而不是WebSockets(不幸的是)。这是因为Flask本身无法原生支持WebSockets(但似乎Flask 2.0已经采取了一些措施来改善支持)。要使用Flask-SocketIO运行WebSockets,您需要通过像gunicorn这样的服务器运行Flask,使用eventlet或gevent工作进程。 https://flask-socketio.readthedocs.io/en/latest/deployment.html - Paul P M

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