Python套接字在连接启动后添加命名空间



查看python socketio文档,我定义了一个自定义名称空间:

import socketio

class MyCustomNamespace(socketio.ClientNamespace):
def on_connect(self):
pass
def on_disconnect(self):
pass
def on_my_event(self, data):
self.emit('my_response', data)
sio = socketio.Client()
sio.register_namespace(MyCustomNamespace('/chat'))
sio.connect("http://127.0.0.1:8888")
sio.emit("get", namespace="/chat")

现在,只要我在注册名称空间后启动连接,这个名称空间就可以工作。有道理。但是,有没有一种方法可以在连接启动后注册名称空间?我得到以下错误:

File "//src/pipeline/reporting/iam.py", line 30, in request_iam_credentials
self.socket_client.emit(
File "/usr/local/lib/python3.8/dist-packages/socketio/client.py", line 393, in emit
raise exceptions.BadNamespaceError(
socketio.exceptions.BadNamespaceError: /chat is not a connected namespace.

每个命名空间都有点不同,您必须连接。如果不明确使用命名空间,则默认为"/"。外观:

sio = socketio.Client()
sio.emit("get") # emit before connect
# socketio.exceptions.BadNamespaceError: / is not a connected namespace.

您的情况是一样的,但使用/chat命名空间-您连接到/,但尝试发射到/chat。您需要自己连接到/chat命名空间:

sio.connect("http://127.0.0.1:8888", namespaces=["/chat"]) # notice you can connect to more namespaces at once

这正是sio.connect在您之前注册命名空间时所做的。

最新更新