Я пытаюсь отправить данные с моего сервера Python на клиент JavaScript, используя Twisted и Autobahn для настройки веб-сокета.
Вот мой протокол сервера Python:
class NewServerProtocol(WebSocketServerProtocol):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def onConnect(self, request):
print("onConnect")
def onOpen(self):
super().onOpen()
print("onOpen")
def onClose(self, wasClean, code, reason):
super().onClose(wasClean, code, reason)
print("onClose")
Я настраиваю сервер внутри __init__()
из WebSocketClientProtocol
следующим образом:
class NewClientProtocol(WebSocketClientProtocol):
def __init__(self, factory, ip_address, *args, **kwargs):
super().__init__(*args, **kwargs)
self.id = 2
self.server_factory = WebSocketServerFactory(url='ws://127.0.0.1:9002/test/' + str(self.id))
self.server_factory.port = 9002
self.server_factory.protocol = NewServerProtocol
reactor.listenTCP(9002, self.server_factory)
Причина, по которой я настраиваю сервер внутри другого клиента, заключается в том, что я хочу «пересылать» сообщения, которые клиент получает, на другого клиента, что я пытаюсь сделать так (это функция onMessage
NewClientProtocol
:
def onMessage(self, payload, is_binary):
if not is_binary:
message = json.loads(payload.decode('utf-8'))
if 'test' in message:
print(type(payload) == bytes)
self.server_factory.protocol.sendMessage(payload, is_binary)
Мой сервер печатает
onConnect
onOpen
True
Это означает, что сервер подключается правильно, а тип полезной нагрузки - байты, но я получаю сообщение об ошибке:
File "/home/me/.local/lib/python3.5/site-packages/autobahn/websocket/protocol.py", line 2172, in sendMessage
assert(type(payload) == bytes)
builtins.AssertionError: