Python Socket.io 处理所有事件(捕获来自客户端的所有事件)

dat*_*uoc 1 python event-handling catch-all socket.io web

Python Socket.io 的文档位于:https://python-socketio.readthedocs.io/en/latest/api.html#asyncserver-class

这是服务器类,具有用于处理事件的“event”和“on”方法。然而,这些都是命名事件。

如何在服务器端处理来自客户端的所有事件(捕获所有)?我已经尝试过.on("*",...),但没有成功,星号*似乎只是Python socket.io 中的一个字符串。

use*_*462 5

您可以使用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())
Run Code Online (Sandbox Code Playgroud)