我是通过mvc的业务系统通过gatewayclient进行数据下发的,所以所有来自web前端的请求都是通过短链接形式上报,再下发。
那当群(group)里有人掉线或者下线(没有通过接口,即 没有通过 leaveGroup)的方式来离开。那我就无法给群组下发 xxx 离开群聊 的信息。
另外同样的,我给某个人发信息的时候,我可以在业务接口里先判断此人是否在线
下面是伪代码
public function say(int $uid, string $message)
{
if (GatewayClient::isUidOnline($uid)){
// 发送消息
GatewayClient::sendToUid($uid, $message);
}else{
// 存储离线消息
Redis::lpush('wss:user.' . $uid . ':offline.message', $message);
}
}
但这个依旧有问题,我为什么在发信息之前无法判断这人是否在线。
然后我考虑解决方案
前端:
定时任务 处于激活页面的聊天窗口中的聊天对象. 定时去刷新是否在线。
然后群组的话,只有激活群的聊天框时,才去定时轮询在线人数以及在线人的基本信息。
上面是我考虑的,不知道有没有更加成熟具体的解决方案。希望各路大神能够解答一下。
心跳去判断了
是A要知道B有没有掉线,心跳是能让ws服务器知道B有没有掉线。下发信息都通过(mvc服务器)gatewayclient中转下发。就。。。概念上不太一样可能。
Gateway::isOnline 用这个去判断用户是否在线