使用 gatewayworker 时,如果期望所有已经连上的用户重连,应该怎么做?

= - =

问题描述

文档没找到相关信息,源码找到了 BusinessWorker->gatewayConnections

我在 Events::onClose 循环 gatewayConnections,调用 connection->close 后,无法判断是否有效。

目的:
希望开发阶段 reload 代码后,能自动把客户端断开,让他们重连。因为客户端连上的时候,Events::onConnect 有做一些处理,例如初始化一个游客账号,将连接与游客绑定在一起。

见截图。

截图

524 2 0
2个回答

不败少龙

试试心跳检测

  • = - = 2022-11-02

    已经做了心跳检测啦,我是希望开发阶段 reload 代码后,能自动把客户端断开,让他们重连。因为客户端连上的时候,Events::onConnect 有做一些处理

  • 不败少龙 2022-11-02

    断开的之前先发送一个类型 内容给 客户端 这个类型专门处理失败的

  • = - = 2022-11-02

    嗯,按老大说的方案,发给客户端断开连接是可行。不知道有没有更好的方法

walkor

客户端连接的是gateway进程,不是连的businessWorker进程,businessWorker进程无法获取客户端连接对象。BusinessWorker->gatewayConnections 是gateway与businessWorker的内部连接,断开它们不影响客户端连接。

你可以用Gateway::sendToAll()给所有客户端发消息,让客户端自己断开重连。但是看起来这个重连好像没什么意义

  • = - = 2022-11-02

    那希望未进行 Gateway::bindUid 的连接以游客身份存在,并且代码 reload 后他们也能保持游客身份应该怎么做呢。更新了提问中的截图。因为很多信息都是跟的 BusinessWorker,当 BusinessWorker 重新加载后,已有连接的信息会全部丢失。当前是考虑让客户端断掉重连,这样能保证都是重新开始的。

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