workerman转发提示对方不在线

0

现在有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不在线

已邀请:

木子耗 - 80后PHP

赞同来自:

目前暂时用的解决方法:
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以上版本,不会有这个问题

要回复问题请先登录注册