发现有的链接 onClose没有收到

梦醒的夏天

gatewayworker pingInterval 设置20 pingNotResponseLimit 设置2 pingData 设置 '' ,偶尔还是有的链接没有执行onClose方法,请问可能是什么原因呢

1351 2 0
2个回答

six

没看到其它进程配置。会不会有可能判断onClose执行没执行的方法有问题?

另外看到初始化多个gateway,每个gateway使用的是不同的register,意思是要启动多个互相独立gatewayWorker?

建议不要启动多个独立gatewayWorker,使用只启动一个gatewayWorker测试下,有可能是因为启动多个gatewayWorker但是进程配置没设置好。

还有把所有进程都停止,然后用 ps auxf 命令看下,是不是有残余的GatewayWorker进程。进程没停止干净也可能导致问题。

  • 梦醒的夏天 2020-10-24

    相互独立的GatewayWorker 进程模型,做游戏开发涉及到房间,同一个房间内玩家只能在同一个进程, onClose 后玩家执行下线,数据存储操作,发现个别玩家并没有执行下线逻辑

scan_z

估计和我遇到的问题一样,极端网络情况下业务代码逻辑没处理好造成的。

https://wenda.workerman.net/question/5755

  • 梦醒的夏天 2020-10-24

    查看 vender/workerman/workerman.log 并没有报错信息产生,没有进程重启日志,onClose 却没收到,下线逻辑处理不了 ,导致用户无法再次登录,业务逻辑限制在线玩家再次登录,必须下线处理完才能登录

  • scan_z 2020-10-24

    @4786:这和报错没什么关系,客户端极端网络环境,比如我那个情况触发了onMessage同时也立即触发了onClose,这也导致我onMessage里面登陆流程没走完就断开了,onClose里面获取不到登陆的用户信息。

  • 梦醒的夏天 2020-10-24

    我的用户信息不是通过session获取的 ,onClose 有client_id参数 内存里通过client_id 获取用户信息,登录的时候信息存在内存里

  • xiuwang 2020-10-24

    onClose里记录下client_id 到本地日志,看下到底执行到没。

  • 梦醒的夏天 2020-10-26

    @1459:好的

年代过于久远,无法发表回答
🔝