Ошибка подтверждения в Tornado при отправке ответа на все сокеты - PullRequest
0 голосов
/ 24 августа 2018

Мы получаем данные об акциях из UDP-сокета, а затем воспроизводим их в браузерах с использованием сокетных соединений Tornado.

Тем не менее время от времени появляется ошибка, которая пытается отправить то же самое.Что может быть причиной того же?

12346 ERROR:2018-08-24 01:01:59,202:get_broadcast
12347 Traceback (most recent call last):
12348   File "/release/manik/muTrade-1.0.0-1.7.4.5/web/utrade/WebSocket/get_broadcast.py", line 321, in _send_msg_to_clients
12349     socketConnectionObject.send(smart_str(simplejson.dumps(data)))
12350   File "/release/st01/py3Env/lib/python3.6/site-packages/sockjs/tornado/conn.py", line 49, in send
12351     self.session.send_message(message, binary=binary)
12352   File "/release/st01/py3Env/lib/python3.6/site-packages/sockjs/tornado/session.py", line 322, in send_message
12353     self.send_jsonified(proto.json_encode(bytes_to_str(msg)), stats)
12354   File "/release/st01/py3Env/lib/python3.6/site-packages/sockjs/tornado/session.py", line 337, in send_jsonified
12355     self.handler.send_pack('a[%s]' % msg)
12356   File "/release/st01/py3Env/lib/python3.6/site-packages/sockjs/tornado/transports/websocket.py", line 86, in send_pack
12357     self.write_message(message, binary)
12358   File "/release/st01/py3Env/lib/python3.6/site-packages/tornado/websocket.py", line 252, in write_message
12359     return self.ws_connection.write_message(message, binary=binary)
12360   File "/release/st01/py3Env/lib/python3.6/site-packages/tornado/websocket.py", line 783, in write_message
12361     message = self._compressor.compress(message)
12362   File "/release/st01/py3Env/lib/python3.6/site-packages/tornado/websocket.py", line 548, in compress
12363     assert data.endswith(b'\x00\x00\xff\xff')
12364 AssertionError

Редактировать:

Также получено много других ошибок, подробности в этой [теме] [1]

1: https://github.com/tornadoweb/tornado/issues/2479

1 Ответ

0 голосов
/ 10 сентября 2018

Это было вызвано из-за нескольких потоков. Я сохраняю объекты socketclientobject (созданные при создании нового соединения с торнадо) в списке и использую их в других потоках для отправки сообщений.

Я удалил socketObject.send(simplejson.dumps(msg)), который был вызван непосредственно из потоков в

tornado.ioloop.IOLoop.current().add_callback( socketObject.send, simplejson.dumps(msg))

и все стало работать нормально. Я получил несколько ошибок, все было решено.

...