lc-cn / onebots

基于icqq的多例oneBot管理应用
https://docs.onebots.org/
MIT License
171 stars 17 forks source link

多个反向ws出现bug #66

Closed linya72 closed 1 year ago

linya72 commented 1 year ago

onebots在设置多个反向ws地址时,会对每个地址建立 设置过的反向地址数量 次的连接 Cache_709b99409cfcae49.png

Cache_-5429aa541cd42404.png

Cache_-443280510409d8da.png

Cache_2b310f4f6c9f4df7.png

Well2333 commented 1 year ago

经过测试,目前可以确认的是:

  1. ws 链接仅存在一个
  2. 此链接发生了重复上报的现象
  3. 此问题是onebots或icqq导致的,与nonebot2及插件无关

此问题可能的成因是onebots在有多个 ws_reverse 连接时,会向其中每一条连接发送链接数量的事件,而不是正常的向每一条链接发送一个事件。

Well2333 commented 1 year ago

问题可能是由于对每个 WSR 连接都注册了事件监听器,导致每次事件发生时,每个连接都会收到事件通知。正确的做法应该是无论有多少个连接,每个事件只分发一次。需要检查是不是在每次调用 startWsReverse 函数时都重复注册了事件监听器,从而导致同一个事件被多次分发。

相关代码段:

Misaka-Mikoto-Tech commented 1 year ago

问题的根源在于多次执行 this.on("dispatch" 导致的,比如 反向ws

Gay-GG commented 1 year ago

on为持久监听器,多次调用传入相同的listener,将on改为once即可,创建once监听器接收到事件仅调用一次listener,之后会移除此监听器

lc-cn commented 1 year ago

今日修复