Python Socket.io 的文档在这里:https ://python-socketio.readthedocs.io/en/latest/api.html#asyncserver-class
那是服务器类,具有用于处理事件的“事件”和“打开”方法。但是,这些都是命名事件。
如何在服务器端处理来自客户端的所有事件(全部捕获)?我试过.on("*",...)
但没用,星号*
似乎只是 Python socket.io 中的一个字符串。
Python Socket.io 的文档在这里:https ://python-socketio.readthedocs.io/en/latest/api.html#asyncserver-class
那是服务器类,具有用于处理事件的“事件”和“打开”方法。但是,这些都是命名事件。
如何在服务器端处理来自客户端的所有事件(全部捕获)?我试过.on("*",...)
但没用,星号*
似乎只是 Python socket.io 中的一个字符串。
您可以使用AsyncNamespace class
覆盖trigger_event方法。
将事件分派到适当的处理程序方法。
在最常见的用法中,此方法不会被子类重载,因为它执行事件到方法的路由。但是,如果需要特殊的调度规则,或者如果需要一个捕获所有事件的方法,则可以覆盖此方法。
class MyCustomNamespace(socketio.AsyncNamespace):
async def trigger_event(self, event_name, sid, *args):
print(f"{event_name=}, {sid=}")
if args:
print(f"data is {args[0]}")
sio.register_namespace(MyCustomNamespace())
它似乎没有明确地出现在文档中,但您可以收听'message'
事件。Like'connect'
和'disconnect'
它是保留的,它会捕获所有传入的消息。
似乎使用 flask_socketioon("*")
捕获所有未注册事件的事件处理程序不起作用。
我不知道它是否会破坏任何东西,但一种解决方法是访问 python-socketio 服务器对象本身,然后使用on("*")
如下:
@sio.server.on('*')
def catch_all(event, sid, *args):
print(f'catch_all(event={event}, sid={sid}, args={args})')