GatewayWorker与MVC(laravel)框架,group内的人员在线情况如何实时更新?

wlfpanda1012

问题描述

我是通过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);
        }
    }

但这个依旧有问题,我为什么在发信息之前无法判断这人是否在线。

为此我考虑了几种解决方案

然后我考虑解决方案
前端:
定时任务 处于激活页面的聊天窗口中的聊天对象. 定时去刷新是否在线。
然后群组的话,只有激活群的聊天框时,才去定时轮询在线人数以及在线人的基本信息。

希望有更好的解决方案

上面是我考虑的,不知道有没有更加成熟具体的解决方案。希望各路大神能够解答一下。

171 1 0
1个回答

不败少龙

心跳去判断了

  • wlfpanda1012 2024-03-01

    是A要知道B有没有掉线,心跳是能让ws服务器知道B有没有掉线。下发信息都通过(mvc服务器)gatewayclient中转下发。就。。。概念上不太一样可能。

  • 不败少龙 2024-03-01

    Gateway::isOnline 用这个去判断用户是否在线

🔝