Это мой первый проект, использующий Tornado ... создание службы сообщений с TornadIO + ZMQ.Я использую izoop pyzmq.Я сталкивался с этой проблемой рекурсивного цикла между iostream и websocket, и пока не могу точно определить, почему.Кажется, клиент подключается нормально, отправляет множество сообщений и получает штраф.Кто-то еще подключается и немного подойдет, потом вылетит.Я не знаю, правильно ли я обрабатываю разъединение, или что-то в сообщении вызывает ошибку чтения в коде торнадо.Все, что на самом деле происходит на моем сервере, это то, что клиент подключается и отправляет сообщения, которые затем просто передаются всем остальным, кто также подключен через веб-сокеты.
Может быть, кто-то может сказать мне, что на самом деле происходит здесь, и еслиэто что-то, с чем я не справляюсь ...1010 *
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():
// Возвращаемся к началу (строка 325 в iostream)
Любая помощь ??????Я использую pypi tornado 1.2.1, tornadIO 0.0.4, zeromq 2.1.4 и pypi pyzmq в Ubuntu Linux
Редактировать: похоже, это происходит из этого фрагмента в моем обработчике 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()</p>
<pre><code>except Exception, e:
logging.error("Failed to close stream and sub socket on client disconnect", exc_info=True)
и вот трассировка:
[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/<strong>init</strong>.py", line 776, in emit
msg = self.format(record)
File "/usr/lib/python2.6/logging/<strong>init</strong>.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/<strong>init</strong>.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)
Что происходит, когда трассировка происходит один,Затем, кажется, складывается, и происходит дважды, а затем 3 раза ... бесконечно.