workerman转发提示对方不在线

木子耗

现在有2个客户端A,B,1个workerman服务端,
客户端A,B是通过守护进程+socket来实现的

现在出现的现象,当长时间不操作:比如过了一天从A 发给B一条数据

那么A发消息给workerman,workerman收到A返回的数据,这一端是正确的

此时workerman收到A的数据 转发给B的时候,就提示B不在线了

而同时:

workerman通过每隔30秒 给客户端A,B发送心跳数据,客户端收到心跳数据返回给workerman,workerman可以收到 ,这个是正常的

2.通过这个方法获得Gateway::getOnlineStatus() 用户A,B都在线
但是在通过这个方法GateWay::isOnline($to_uid) 转发给B的时候,就提示B不在线

3856 2 0
2个回答

木子耗

目前暂时用的解决方法:
1.检测是否在线 在isOnline()方法里做日志检测
2.寻找Gateway::deleteUidAddress()这个函数有没有在其它地方误用。因为我们客户端是固定的,所以暂时不用这个函数了

等待后续日子的进一步检测

  • 暂无评论
walkor 打赏

GateWay::isOnline($to_uid)
客户端在线必须满足两个条件
1、Store::instance('gateway')->get($client_id);里面有值
2、Gateway::getOnlineStatus(); 返回值里面包含了$client_id

你的情况很可能是调用了Gateway::deleteUidAddress($client_id),导致1不成立。

可以使用2.1.2以上版本,不会有这个问题

  • 暂无评论
年代过于久远,无法发表回答
×
🔝