我是通過mvc的業(yè)務系統(tǒng)通過gatewayclient進行數(shù)據下發(fā)的,所以所有來自web前端的請求都是通過短鏈接形式上報,再下發(fā)。
那當群(group)里有人掉線或者下線(沒有通過接口,即 沒有通過 leaveGroup)的方式來離開。那我就無法給群組下發(fā) xxx 離開群聊 的信息。
另外同樣的,我給某個人發(fā)信息的時候,我可以在業(yè)務接口里先判斷此人是否在線
下面是偽代碼
public function say(int $uid, string $message)
{
if (GatewayClient::isUidOnline($uid)){
// 發(fā)送消息
GatewayClient::sendToUid($uid, $message);
}else{
// 存儲離線消息
Redis::lpush('wss:user.' . $uid . ':offline.message', $message);
}
}
但這個依舊有問題,我為什么在發(fā)信息之前無法判斷這人是否在線。
然后我考慮解決方案
前端:
定時任務 處于激活頁面的聊天窗口中的聊天對象. 定時去刷新是否在線。
然后群組的話,只有激活群的聊天框時,才去定時輪詢在線人數(shù)以及在線人的基本信息。
上面是我考慮的,不知道有沒有更加成熟具體的解決方案。希望各路大神能夠解答一下。
心跳去判斷了
是A要知道B有沒有掉線,心跳是能讓ws服務器知道B有沒有掉線。下發(fā)信息都通過(mvc服務器)gatewayclient中轉下發(fā)。就。。。概念上不太一樣可能。