Browse Source

fix: sending data when process is not the main listener

pull/493/head
johaven 5 years ago
parent
commit
5a77dc157c
  1. 19
      socketio/uwsgi_manager.py

19
socketio/uwsgi_manager.py

@ -44,6 +44,7 @@ class UWSGIManager(PubSubManager): # pragma: no cover
self._check_configuration() self._check_configuration()
self.signum = self._sig_number(url) self.signum = self._sig_number(url)
self.queue = Queue() self.queue = Queue()
self.is_listener = False
uwsgi.register_signal(self.signum, 'workers', self._enqueue) uwsgi.register_signal(self.signum, 'workers', self._enqueue)
super(UWSGIManager, self).__init__(channel=channel, super(UWSGIManager, self).__init__(channel=channel,
write_only=write_only, write_only=write_only,
@ -76,7 +77,22 @@ class UWSGIManager(PubSubManager): # pragma: no cover
uwsgi.signal(self.signum) uwsgi.signal(self.signum)
def _enqueue(self, signum): def _enqueue(self, signum):
self.queue.put(uwsgi.queue_last()) if self.is_listener:
self.queue.put(uwsgi.queue_last())
else:
self._internal_emit(uwsgi.queue_last())
def _internal_emit(self, data):
data = pickle.loads(data)
if data and 'method' in data:
if data['method'] == 'emit':
self._handle_emit(data)
elif data['method'] == 'callback':
self._handle_callback(data)
elif data['method'] == 'disconnect':
self._handle_disconnect(data)
elif data['method'] == 'close_room':
self._handle_close_room(data)
def _uwsgi_listen(self): def _uwsgi_listen(self):
for message in iter(self.queue.get, None): for message in iter(self.queue.get, None):
@ -84,5 +100,6 @@ class UWSGIManager(PubSubManager): # pragma: no cover
yield message yield message
def _listen(self): def _listen(self):
self.is_listener = True
for message in self._uwsgi_listen(): for message in self._uwsgi_listen():
yield pickle.loads(message) yield pickle.loads(message)

Loading…
Cancel
Save