Проблема автобана с веб-сокетом при работе с Twistd с использованием файла TAC
У меня есть сервер WebSocket, реализованный с использованием автобана WebSocket Framework с использованием витой. Сервер WebSocket работает нормально, когда программа работает с python. Но если я запускаю это с помощью twistd server runner, создавая tac-файл как twisted service, я получаю следующую ошибку на сервере, когда любой клиент пытается установить соединение и происходит сбой рукопожатия.
2015-12-08 07:17:56,022 - CRITICAL - twisted.publishToNewObserver() 154 Unhandled Error
Traceback (most recent call last):
File "/opt/nrgi-ws/nrgi-ws-virtual-env/local/lib/python2.7/site-packages/twisted/python/log.py", line 84, in callWithContext
return context.call({ILogContext: newCtx}, func, *args, **kw)
File "/opt/nrgi-ws/nrgi-ws-virtual-env/local/lib/python2.7/site-packages/twisted/python/context.py", line 118, in callWithContext
return self.currentContext().callWithContext(ctx, func, *args, **kw)
File "/opt/nrgi-ws/nrgi-ws-virtual-env/local/lib/python2.7/site-packages/twisted/python/context.py", line 81, in callWithContext
return func(*args,**kw)
File "/opt/nrgi-ws/nrgi-ws-virtual-env/local/lib/python2.7/site-packages/twisted/internet/posixbase.py", line 597, in _doReadOrWrite
why = selectable.doRead()
--- <exception caught here> ---
File "/opt/nrgi-ws/nrgi-ws-virtual-env/local/lib/python2.7/site-packages/twisted/internet/tcp.py", line 1067, in doRead
protocol = self.factory.buildProtocol(self._buildAddr(addr))
File "/opt/nrgi-ws/nrgi-ws-virtual-env/local/lib/python2.7/site-packages/twisted/internet/protocol.py", line 135, in buildProtocol
p = self.protocol()
File "/opt/nrgi-ws/nrgi-ws-virtual-env/local/lib/python2.7/site-packages/autobahn/websocket/protocol.py", line 665, in __init__
self.is_closed = txaio.create_future()
File "/opt/nrgi-ws/nrgi-ws-virtual-env/local/lib/python2.7/site-packages/txaio/_unframework.py", line 43, in _throw_usage_error
"To use txaio, you must first select a framework "
exceptions.RuntimeError: To use txaio, you must first select a framework with .use_twisted() or .use_txaio()
4 ответа
Я нашел ту же проблему сегодня. Вы должны понизить txaio до версии 1.1.0
Вот мой список пипсов autobahn (0.10.9) autobahntestsuite (0.7.3) Twisted (15.4.0) txaio (1.1.0) zope.interface (4.1.3)
AutobahnTestSuite был только что обновлен и исправляет эту проблему:
автобан (0.10.9) автобантестуит (0.7.4) витая (15.5.0) txaio (2.1.0)
Можете ли вы попробовать с мастером автобана? Это должно быть исправлено, но пока нет выпуска, содержащего это исправление (dd1cff8f9480a125e510108482bfaf5b9eedc916).
Вы можете установить мастер, как это: pip install https://github.com/crossbario/autobahn-python/archive/master.zip
Эта проблема не происходила в моей системе Ubuntu. У меня была эта проблема в ec2 экземпляре с Machine Image Amazon Linux AMI. Кажется, txaio не может обнаружить доступную витую структуру. Другое исправление, отличное от @helder.vasc, упомянутое выше, заключается в явном указании фреймворка. Добавление этого ниже в tac-файл решило проблему:
import txaio
txaio.use_twisted()
Обратите внимание, что погода - это идеальный способ решить эту проблему.