3

This seems to be a common problem when I search around, but I can't seem to find a viable resolution. The error is not very helpful as far as I can tell as it doesn't really tell you why the saved session is gone.

 Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/eventlet/wsgi.py", line 481, in handle_one_response
    result = self.application(self.environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask_socketio/__init__.py", line 37, in __call__
    start_response)
  File "/usr/local/lib/python2.7/dist-packages/engineio/middleware.py", line 47, in __call__
    return self.engineio_app.handle_request(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/socketio/server.py", line 303, in handle_request
    return self.eio.handle_request(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/engineio/server.py", line 226, in handle_request
    environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/engineio/socket.py", line 79, in handle_get_request
    start_response)
  File "/usr/local/lib/python2.7/dist-packages/engineio/socket.py", line 118, in _upgrade_websocket
    return ws(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/engineio/async_eventlet.py", line 13, in __call__
    return super(WebSocketWSGI, self).__call__(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/eventlet/websocket.py", line 127, in __call__
    self.handler(ws)
  File "/usr/local/lib/python2.7/dist-packages/engineio/socket.py", line 180, in _websocket_handler
    self.receive(pkt)
  File "/usr/local/lib/python2.7/dist-packages/engineio/socket.py", line 48, in receive
    self.server._trigger_event('message', self.sid, pkt.data)
  File "/usr/local/lib/python2.7/dist-packages/engineio/server.py", line 330, in _trigger_event
    return self.handlers[event](*args)
  File "/usr/local/lib/python2.7/dist-packages/socketio/server.py", line 429, in _handle_eio_message
    self._handle_event(sid, pkt.namespace, pkt.id, pkt.data)
  File "/usr/local/lib/python2.7/dist-packages/socketio/server.py", line 371, in _handle_event
    r = self._trigger_event(data[0], namespace, sid, *data[1:])
  File "/usr/local/lib/python2.7/dist-packages/socketio/server.py", line 397, in _trigger_event
    return self.handlers[namespace][event](*args)
  File "/usr/local/lib/python2.7/dist-packages/flask_socketio/__init__.py", line 199, in _handler
    self.server.environ[sid]['saved_session'] = {}
KeyError: 'baee47721e474a1a9885b41ee0ce1847'
Kenny Powers
  • 1,254
  • 2
  • 15
  • 25

1 Answers1

6

First of all, upgrade the following packages: flask-socketio, python-socketio and python-engineio.

I think that will address your issues. This problem occurred with older versions of Flask-SocketIO. The cause that I identified for this condition was that a handler function (these functions you decorate with socketio.on() decorator) ran for a very long time without properly releasing the CPU. If the function ran for longer than 60 seconds without releasing the CPU, then the system mistakenly considered that the client was gone and disconnected the session, causing a KeyError when that session was accessed later.

The error is addressed in the latest release. But also please make sure you release the CPU so that other tasks that run in the background get a chance to do what they need to do.

Miguel Grinberg
  • 65,299
  • 14
  • 133
  • 152
  • That did it. Thanks so much! I had upgraded everything but flask-socketio and overlooked that somehow. Also, I love this extension and want to extend my sincere appreciation for the time you put into this. It's opened a world of possibilities for me! Thank you! – Kenny Powers Jun 29 '16 at 00:07
  • 1
    I am facing same issue with error message. I am running application with latest version Flask-SocketIO==4.2.1, It's been working properly before authentication implemented using flask-login with login manager. – Hardik Gajjar Mar 02 '20 at 10:03
  • how could I release CPU in this fragment : `const askServer = () => { console.log('start'); socket.emit('x', function (data) { console.log('x'); } ) socket.on('server event', (data) => { console.log('server event:', data) }) }` ? – Qbik Mar 12 '21 at 12:46