Skip to content

v1.0.9 — 幽灵在线根因二:载体写永久挂起导致会话不回收

Choose a tag to compare

@EUForest EUForest released this 02 Sep 21:10
· 1 commit to main since this release

修复

面板在线数在客户端断开后一直不归零(幽灵在线)——根因二:载体写永久挂起

v1.0.8 修好了保活计时被下行重置的问题,但线上实测会话仍不回收。抓到更底层的根因:

  • 现象:客户端断开后,节点侧没有一条入站连接到监听口,却仍攥着十余条出站
    中继
    (含 Google FCM :5228),在线上报连续 7 分钟以上恒为 1
  • 根因:H2 载体的 poll_write 在发送窗口耗尽时依赖 poll_capacity;对端静默
    消失后永不回 WINDOW_UPDATEpoll_capacity 便永久 Pending。下行中继(安卓
    FCM 推送、浏览器长连接)先把发送窗口写空,客户端随后断开——此后任何一次载体写
    (下行帧或保活 Ping)都永久挂起
    ,把会话读写循环整个钉死:保活探测再也轮不到、
    会话永不回收、每个上报周期都被当成在线。
  • 修复:给服务端的载体写加超时上界。写在界内完不成即判定载体静默失效、结束
    会话循环,让注销得以运行。健康客户端毫秒级排空窗口、永不触界;只连着不排空的
    已死连接才被回收。客户端行为不变。

影响

  • 客户端无论正常还是异常(强杀/断网)断开,且即便仍有 FCM/浏览器等下行中继
    面板在线数都会在约 2~3 分钟内归零。
  • v1.0.8 只修了两个根因中的一个;本版补上第二个,两者叠加才是完整修复。

升级

bash install.sh

产物

文件 架构
dbk-node-x86_64-unknown-linux-gnu.tar.gz x86_64 / amd64
dbk-node-aarch64-unknown-linux-gnu.tar.gz aarch64 / arm64