Клиент socket.io не может подключиться к серверу.«Соединение уже закрыто» - PullRequest
0 голосов
/ 06 июля 2019

Я хочу написать простой клиент socket.io на python для подключения к определенному пространству имен стороннего сервера socket.io, доступ к которому обычно осуществляется через браузер + javascript.

В браузере соединение работает так: Сначала загружается страница https://url:port/socket.io/1/?t=1562423475873, которая возвращает строку, аналогичную ACKHJADICSBVFUIASBFAKJSDN:60:60:websocket,xhr-polling,jsonp-polling

Затем устанавливается соединение с wss://url:port/socket.io/1/websocket/ACKHJADICSBVFUIASBFAKJSDN

Для python я написал следующий код.

import socketio

sio = socketio.Client(logger=True, engineio_logger=True)

class MyCustomNamespace(socketio.ClientNamespace):
    def on_connect(self):
        print("I'm connected!")

    def on_disconnect(self):
        print("I'm disconnected!")

sio.register_namespace(MyCustomNamespace('/ns'))

socketiopath = "socket.io/1/"

sio.connect("https://url:port", namespaces=["/ns"],  socketio_path=socketiopath, transports=["websocket"])

while True:
    sio.wait()

Этот код не работает. Сообщение "Я на связи!" не печатается. Я получаю следующий вывод логгера:

Attempting WebSocket connection to wss://url:port/socket.io/1/?transport=websocket&EIO=3
Traceback (most recent call last):
  File "test.py", in <module>
    sio.connect("https://url:port", namespaces=["/ns"],  socketio_path=socketiopath, transports=["websocket"])
  File "/home/user/.local/lib/python3.6/site-packages/socketio/client.py", line 244, in connect
    engineio_path=socketio_path)
  File "/home/user/.local/lib/python3.6/site-packages/engineio/client.py", line 166, in connect
    url, headers, engineio_path)
  File "/home/user/.local/lib/python3.6/site-packages/engineio/client.py", line 341, in _connect_websocket
    cookie=cookies)
  File "/home/user/.local/lib/python3.6/site-packages/websocket/_core.py", line 514, in create_connection
    websock.connect(url, **options)
  File "/home/user/.local/lib/python3.6/site-packages/websocket/_core.py", line 226, in connect
    self.handshake_response = handshake(self.sock, *addrs, **options)
  File "/home/user/.local/lib/python3.6/site-packages/websocket/_handshake.py", line 79, in handshake
    status, resp = _get_resp_headers(sock)
  File "/home/user/.local/lib/python3.6/site-packages/websocket/_handshake.py", line 158, in _get_resp_headers
    status, resp_headers, status_message = read_headers(sock)
  File "/home/user/.local/lib/python3.6/site-packages/websocket/_http.py", line 305, in read_headers
    line = recv_line(sock)
  File "/home/user/.local/lib/python3.6/site-packages/websocket/_socket.py", line 123, in recv_line
    c = recv(sock, 1)
  File "/home/user/.local/lib/python3.6/site-packages/websocket/_socket.py", line 115, in recv
    "Connection is already closed.")
websocket._exceptions.WebSocketConnectionClosedException: Connection is already closed.

Не могли бы вы сказать мне, чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...