2011-04-26 6 views
1

Ceci est mon premier projet utilisant Tornado ... créant un service de messagerie avec TornadIO + ZMQ. J'utilise l'ioloop de pyzmq. J'ai rencontré ce problème d'une boucle récursive entre l'iostream et la socket Web, et je ne peux pas encore déterminer pourquoi. Semble un client se connecte bien et envoie beaucoup de messages et reçoit bien. Quelqu'un d'autre se connecte et est bien pour un peu, puis se bloque. Je ne sais pas si je ne suis pas manipulant une déconnexion correctement, ou si quelque chose dans un message est causant une erreur de lecture dans le code de tornade. Tout ce qui se passe réellement sur mon serveur, c'est qu'un client se connecte et envoie des messages, qui sont ensuite transmis à tout le monde qui est également connecté via les websockets.tornade: boucle de récursion entre websocket et iostream

Peut-être que quelqu'un peut me dire ce qui est vraiment passe ici et si son quelque chose que je ne manipulation correctement ...

// Début du retraçage ...

[E 110426 01:45:28 ioloop:295] Exception in I/O handler for fd 22 Traceback (most recent call last): File "/usr/local/lib/python2.6/dist-packages/pyzmq-2.1.4-py2.6-linux-x86_64.egg/zmq/eventloop/ioloop.py", line 282, in start self._handlers[fd](fd, events) File "/usr/local/lib/python2.6/dist-packages/pyzmq-2.1.4-py2.6-linux-x86_64.egg/zmq/eventloop/stack_context.py", line 133, in wrapped callback(*args, **kwargs) File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/iostream.py", line 199, in _handle_events self._handle_read() File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/iostream.py", line 258, in _handle_read if self._read_from_buffer():

// START: bloc qui boucle récursive

File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/iostream.py", line 325, in _read_from_buffer self._consume(loc + delimiter_len)) File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/iostream.py", line 230, in _run_callback callback(*args, **kwargs) File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/stack_context.py", line 173, in wrapped callback(*args, **kwargs) File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/websocket.py", line 193, in _on_end_delimiter self._receive_message() File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/websocket.py", line 178, in _receive_message self.stream.read_bytes(1, self._on_frame_type) File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/iostream.py", line 149, in read_bytes if self._read_from_buffer(): File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/iostream.py", line 314, in _read_from_buffer self._run_callback(callback, self._consume(num_bytes)) File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/iostream.py", line 230, in _run_callback callback(*args, **kwargs) File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/stack_context.py", line 173, in wrapped callback(*args, **kwargs) File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/websocket.py", line 183, in _on_frame_type self.stream.read_until("\xff", self._on_end_delimiter) File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/iostream.py", line 133, in read_until if self._read_from_buffer():

// boucle retour au début (ligne 325 dans iostream)

Toute aide ?????? Im en utilisant la tornade de pypi 1.2.1, 0.0.4 tornadIO, zeromq 2.1.4, et pypi pyzmq, sur linux ubuntu

Edit: Il semble provenir de cet extrait dans mon gestionnaire on_close():

if self._client_sub and self._client_sub.stream: try: self._client_sub.stream.stop_on_recv() self._client_sub.stream.stop_on_err()

except Exception, e: 
    logging.error("Failed to close stream and sub socket on client disconnect", exc_info=True) 

et est ici le retraçage:

[E 110425 20:52:50 messgr:202] Failed to close stream and sub socket on client disconnect Traceback (most recent call last): File "messgr.py", line 198, in on_close try: AttributeError: 'NoneType' object has no attribute 'stream' Traceback (most recent call last): File "/usr/lib/python2.6/logging/init.py", line 776, in emit msg = self.format(record) File "/usr/lib/python2.6/logging/init.py", line 654, in format return fmt.format(record) File "/usr/local/lib/python2.6/dist-packages/tornado-1.2.1-py2.6.egg/tornado/options.py", line 362, in format record.exc_text = self.formatException(record.exc_info) File "/usr/lib/python2.6/logging/init.py", line 416, in formatException traceback.print_exception(ei[0], ei[1], ei[2], None, sio) File "/usr/lib/python2.6/traceback.py", line 125, in print_exception print_tb(tb, limit, file) File "/usr/lib/python2.6/traceback.py", line 69, in print_tb line = linecache.getline(filename, lineno, f.f_globals) File "/usr/lib/python2.6/linecache.py", line 14, in getline lines = getlines(filename, module_globals) File "/usr/lib/python2.6/linecache.py", line 40, in getlines return updatecache(filename, module_globals)

ce qui se passe est que retraçage arrive un. Ensuite, il semble empiler, et arriver deux fois, puis trois fois ... sans fin.

+0

J'ai trouvé un peu plus journal. Il semble provenir de cet extrait de mon gestionnaire on_close(): – jdi

Répondre

1

semble très similaire à this question

+0

Oui, désolé, je me suis rendu compte qu'il a été résolu avec l'auteur de la bibliothèque. Donc, je vais marquer cela comme une réponse :-) – jdi

+0

Merci, mais je me demande pourquoi j'ai eu ces représentants négatifs! – calvinkrishy

+0

Peut-être parce que ce n'était pas une réponse, mais plus d'un commentaire? – jdi