为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 flask_socketio.disconnect 会阻止线程完成?

为什么 flask_socketio.disconnect 会阻止线程完成?

牧羊人nacy 2022-07-26 21:04:41
我有以下系统:[Client] - [Web Server] - [Connecotr]。连接器是 Web 服务器和数据源之间的一种中间代码。我需要监视与连接器的服务器连接。如果连接丢失,那么我必须通知客户端。Web 服务器和连接器之间的通信是使用 socketio 组织的。问题是如果连接器停止工作,那么 Web 服务器将在一分钟后知道它(这是最好的情况)。我决定服务器应该每秒检查一次连接器的状态。当连接器连接到服务器时,后台任务将启动。任务的本质:每一秒:1)固定时间;2)将固定时间保存到堆栈中;3) 将回显消息发送到连接器。(见 server.background_thread)连接器接受回显消息和时间戳作为参数,并将回显消息发送到 Web 服务器,作为它传递接收到的时间戳的参数。(见client.echo)Web 服务器收到回显消息,如果时间戳等于堆栈中的最后一个值,则从堆栈中删除该值。(见 server.on_echo_connector)在 Web 服务器上,每次迭代都会检查堆栈大小(请参阅 server.background_thread)。如果大于5,则表示连接器5次没有响应回显消息,我们认为连接器不可用,断开连接。当服务器意识到连接器不可用时,需要终止向连接器发送回显消息的线程。一旦堆栈大小大于 5,我退出无限循环并调用flask_socketio.disconnect (connector_sid, '/ connector'). 在这个电话之后没有任何效果(例如print)在on_disconnect_connector(server) 方法中,thread.join()被调用并且永远不会终止。而且我需要完成线程,这样当连接器再次启动时,它会连接成功,一切重新开始。如何解决这个问题呢?
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

需要为客户端安装一个额外的库(请参阅

pip install "python-socketio[client]"

感谢这个库,WebSocket 传输工作。现在断开连接器立即可见。


查看完整回答
反对 回复 2022-07-26
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信