Python socketio 在连接启动后添加命名空间
Python socketio add namespace after a connection is started
查看 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.
每个名字space有点不同space你必须连接。如果您不明确使用名称 space,则默认为“/”。看:
sio = socketio.Client()
sio.emit("get") # emit before connect
# socketio.exceptions.BadNamespaceError: / is not a connected namespace.
你的情况是一样的,但是使用 /chat
namespace - 你连接到 /
但尝试发送到 /chat
。您需要自己连接到 /chat
namespace:
sio.connect("http://127.0.0.1:8888", namespaces=["/chat"]) # notice you can connect to more namespaces at once
这正是 sio.connect
在您之前注册名称space 时所做的。
查看 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.
每个名字space有点不同space你必须连接。如果您不明确使用名称 space,则默认为“/”。看:
sio = socketio.Client()
sio.emit("get") # emit before connect
# socketio.exceptions.BadNamespaceError: / is not a connected namespace.
你的情况是一样的,但是使用 /chat
namespace - 你连接到 /
但尝试发送到 /chat
。您需要自己连接到 /chat
namespace:
sio.connect("http://127.0.0.1:8888", namespaces=["/chat"]) # notice you can connect to more namespaces at once
这正是 sio.connect
在您之前注册名称space 时所做的。