1

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

那是服务器类,具有用于处理事件的“事件”和“打开”方法。但是,这些都是命名事件。

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

4

3 回答 3

2

您可以使用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())
于 2021-08-14T22:28:44.750 回答
0

它似乎没有明确地出现在文档中,但您可以收听'message'事件。Like'connect''disconnect'它是保留的,它会捕获所有传入的消息。

于 2020-11-23T08:10:45.157 回答
0

似乎使用 flask_socketioon("*")捕获所有未注册事件的事件处理程序不起作用。

我不知道它是否会破坏任何东西,但一种解决方法是访问 python-socketio 服务器对象本身,然后使用on("*")如下:

@sio.server.on('*')
def catch_all(event, sid, *args):
    print(f'catch_all(event={event}, sid={sid}, args={args})')
于 2022-01-06T16:07:41.993 回答