sealdice / sealdice-core

海豹骰核心程序,船新的trpg骰点机器人。轻量易用,功能强大,支持所有主流IM平台,并能在win/linux/mac/android下使用。
https://sealdice.com
MIT License
157 stars 39 forks source link

refactor(IMSession): 重构自动退群逻辑 #1100

Closed PaienNate closed 1 month ago

PaienNate commented 1 month ago

收集了之前的使用者的问题后,总结原本的鲨群机的策略问题如下:

  1. 后台开着一个线程,线程豹炸可能导致海豹豹炸
  2. 由于锁机制,似乎用户无法进行热修改(必须重启海豹才能改单次退群时间)
  3. 对于时间戳=0的情况,会错误进行退群,引发麻烦
  4. 偶发退群莫名其妙消失的问题

针对上述问题,重构了鲨群机,大概方向不变,而修改代码如下原理:

  1. 后台不再维持一个线程,而是启动一个每x分钟调度一次的调度。
  2. 调度内首先先寻找要退的群,直到要退的群数量足够用户配置的数量(或等到群遍历完),忽略时间戳=0的情况
  3. 启一个线程,该线程只管退群,并等待x(从8秒到11秒取一个随机值)秒。
  4. 对线程进行recover,豹错后保证能继续执行,而不影响正常运行
  5. 补充部分日志。
PaienNate commented 1 month ago

Work on your machine?

自测了一下,貌似新版工作正常。旧版逻辑白鱼已经测试过,退了一天,无问题。