Mat*_*one 7 python flask socket.io python-socketio
在一个运行在 RaspberryPi 上、大约有 10-20 个客户端的小型 Flask Web 服务器上,我们会定期收到此错误:
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'
Run Code Online (Sandbox Code Playgroud)
该错误是从内部自动生成的python-socketio
。这个错误的真正含义是什么?我该如何预防或抑制它?
据我所知,这通常意味着服务器无法跟上向所有客户端提供数据的速度。
一些可能的缓解技术包括断开不活动的客户端连接、尽可能减少发送的数据量、以更大的块发送实时数据或升级服务器。如果您需要大量数据吞吐量,可能还有比socketIO
.
我已经能够通过在socketIO
构造函数中设置非常高的 ping 速率和低超时来重现它:
from flask_socketio import SocketIO
socketio = SocketIO(engineio_logger=True, ping_timeout=5, ping_interval=5)
Run Code Online (Sandbox Code Playgroud)
这意味着服务器必须向所有客户端发送大量消息,并且它们没有很长时间来响应。然后我打开大约 10 个客户端,我开始看到KeyError
.
对我们服务器的进一步调试发现一个进程正在发布大量实时数据,该数据仅在少数客户端上运行良好,但KeyError
一旦我达到大约十几个客户端,就开始偶尔发出问题。
归档时间: |
|
查看次数: |
3607 次 |
最近记录: |