0x00 前言
在调试新特性代码的时候,往往需要多次重启 rAthena 服务。
某天我开电脑用 VS2022 启动服务后,登录 RO,突然客户端跳出一个异常 服务器终止联机
,
对应在 login-server 的服务器窗口跳出一个异常:
[Status]: Connection refused: there is no char-server online (account: admin).
反复重试都是一样的异常:
0x10 分析 & 解决
我上次关电脑的时候,一切都是正常运行的,所以基本可以排除源码问题,估计是运行环境哪里发生了变化。
但是我排查了 ip 配置、封包版本、退回上个版本的客户端等情况,都是一样的问题,无法联机服务器。
偶然之下瞄了一眼 docker,发现是这次 docker 在电脑开机启动时,把稳定版的 rAthena 服务自动跑起来了:
我把 docker 的 RO 服务停止后,果不其然,就能成功登录服务了。
0x20 结论
所以引发 服务器终止联机 Connection refused
这种问题的根因,就是同一个服务器,启动了 2 个以上的 rAthena 服务导致的。
客户端在登录时,会话随机找到了一个 login-server,但是 login-server 却不知道使用哪一个 char-server,导致了报错。
很奇怪第 2 次启动时,服务进程应该无法绑定相同的端口,这里估计有 BUG
0x30 优化
为了下一次出现同样问题时可以快速定位,我在客户端的 data/msgstringtable.csv
修改了第 5 行为:
MSI_SERVER_OFF,服务器终止联机\n请检查是否启动了多个服务器
这样下次再发生就能给自己提示了: