Python socket.io客户端如何本地触发emit事件不发送到服务端
解决方案
python-socketio 库原生提供了本地触发事件的专用方法 trigger_event,该方法仅执行本地已注册的事件处理函数,不会向服务端发送任何网络报文,完全符合你的需求。
你之前使用的 sio.call 和 sio.emit 都是面向服务端通信的 API,必然会产生网络请求,因此不符合本地触发的要求。
使用方法
异步客户端(你当前使用的 async 版本)调用格式如下:await sio.trigger_event(事件名, 命名空间, *参数列表)
- 命名空间不传的情况下默认值为
/,和你注册事件时使用的命名空间保持一致即可 - 后续参数会按顺序传入对应的事件处理函数
场景适配示例
你要触发本地 on_new_data 事件,直接替换原来的 sio.call 调用即可:
# 纯本地触发,无任何网络请求 await sio.trigger_event("on_new_data")
如果需要给事件处理函数传参,直接在后面追加参数即可,比如触发你的 auth_err 事件并传入错误数据:
await sio.trigger_event("auth_err", "/", {"code": 401, "msg": "token失效"})
注意事项
- 触发用的事件名必须和注册时的事件名完全匹配,大小写敏感
- 异步场景下必须加
await关键字,否则事件处理函数不会执行 - 该方法的返回值就是对应事件处理函数的返回值,可以直接接收复用
内容的提问来源于stack exchange,提问作者Axisnix
相关产品推荐
相关产品推荐

