Python SocketIO KeyError : 'Session is disconnected'

标签 python flask socket.io python-socketio

在具有大约 10-20 个客户端的 RaspberryPi 上运行的小型 Flask 网络服务器上,我们会定期收到此错误:

Error on request:
Traceback (most recent call last):
  File "/home/pi/3D_printer_control/env/lib/python3.7/site-packages/werkzeug/serving.py", line 270, in run_wsgi
    execute(self.server.app)
  File "/home/pi/3D_printer_control/env/lib/python3.7/site-packages/werkzeug/serving.py", line 258, in execute
    application_iter = app(environ, start_response)
  File "/home/pi/3D_printer_control/env/lib/python3.7/site-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/pi/3D_printer_control/env/lib/python3.7/site-packages/flask_socketio/__init__.py", line 43, in __call__
    start_response)
  File "/home/pi/3D_printer_control/env/lib/python3.7/site-packages/engineio/middleware.py", line 47, in __call__
    return self.engineio_app.handle_request(environ, start_response)
  File "/home/pi/3D_printer_control/env/lib/python3.7/site-packages/socketio/server.py", line 360, in handle_request
    return self.eio.handle_request(environ, start_response)
  File "/home/pi/3D_printer_control/env/lib/python3.7/site-packages/engineio/server.py", line 291, in handle_request
    socket = self._get_socket(sid)
  File "/home/pi/3D_printer_control/env/lib/python3.7/site-packages/engineio/server.py", line 427, in _get_socket
    raise KeyError('Session is disconnected')
KeyError: 'Session is disconnected'  

错误是从 python-socketio 内部自动生成的。此错误的真正含义是什么?我该如何防止或抑制它?

最佳答案

据我所知,这通常意味着服务器无法跟上向所有客户端提供数据的速度。

一些可能的缓解技术包括断开非事件客户端的连接、尽可能减少发送的数据量、以更大的 block 发送实时数据或升级服务器。如果您需要大量数据吞吐量,可能还有比 socketIO 更好的选择。

我已经能够通过在 socketIO 构造函数中设置非常高的 ping 速率和低超时来重现它:

from flask_socketio import SocketIO

socketio = SocketIO(engineio_logger=True, ping_timeout=5, ping_interval=5)

这意味着服务器必须向所有客户端发送大量消息,而他们没有很长时间做出响应。然后我打开大约 10 个客户端,我开始看到 KeyError

我们的服务器的进一步调试发现了一个正在发布大量实时数据的进程,该进程仅在少数客户端上运行良好,但一旦我达到大约一打,就会开始偶尔发出 KeyError

关于Python SocketIO KeyError : 'Session is disconnected' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69746102/

相关文章:

python - OpenERP自己的前缀序列

python - OOP如何让脚本(游戏)运行

python - pymongo按日期排序

python - Flask Babel 不起作用

python - 带有漂白剂的 Flask 和 Jinja2,图像 HTML 不工作

node.js - 在nodejs上运行socket.io客户端代码

python - 数据集中分类变量之间的相关性

mongodb - 将带有 python-eve 应用程序的 docker 容器连接到带有 mongodb 的 docker 容器

javascript - 用户套接字 ID 是关键信息吗? (安全 Angular )

javascript - If/Else 语句 Socket.io 客户端