Автобан websocket sendMessage AssertionError - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь отправить данные с моего сервера 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)

Причина, по которой я настраиваю сервер внутри другого клиента, заключается в том, что я хочу «пересылать» сообщения, которые клиент получает, на другого клиента, что я пытаюсь сделать так (это функция onMessageNewClientProtocol:

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: 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...