Я хочу написать простой клиент 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.
Не могли бы вы сказать мне, чего мне не хватает?