现在有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不在线
目前暂时用的解决方法:
1.检测是否在线 在isOnline()方法里做日志检测
2.寻找Gateway::deleteUidAddress()这个函数有没有在其它地方误用。因为我们客户端是固定的,所以暂时不用这个函数了
等待后续日子的进一步检测
GateWay::isOnline($to_uid)
客户端在线必须满足两个条件
1、Store::instance('gateway')->get($client_id);里面有值
2、Gateway::getOnlineStatus(); 返回值里面包含了$client_id
你的情况很可能是调用了Gateway::deleteUidAddress($client_id),导致1不成立。
可以使用2.1.2以上版本,不会有这个问题