查看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
在您之前注册命名空间时所做的。