Gateway::isOnline
說明:
int Gateway::isOnline(string $client_id);
判斷$client_id是否還在線
是否在線取決于對應(yīng)client_id是否觸發(fā)過onClose回調(diào)。
參數(shù)
$client_id
客戶端的client_id
返回值
在線返回1,不在線返回0
如果$client_id
對應(yīng)的連接觸發(fā)過onClose回調(diào),則返回0,否則返回1。
注意:如果是客戶端斷網(wǎng)斷電等極端情況掉線,客戶端的onClose回調(diào)可能無法及時(shí)觸發(fā),參見onClose說明。也就是說對應(yīng)客戶端出現(xiàn)斷網(wǎng)斷電等極端掉線情況返回值可能是1,而并非期待的0。這種情況需要心跳來檢測已經(jīng)掉線的客戶端。
范例
use \GatewayWorker\Lib\Gateway;
class Events
{
...
public static function onMessage($client_id, $message)
{
// $message = '{"type":"say_to_one","to_client_id":100,"content":"hello"}'
$req_data = json_decode($message, true);
// 如果是向某個(gè)客戶端發(fā)送消息
if($req_data['type'] == 'say_to_one'))
{
// 如果不在線就先存起來
if(!Gateway::isOnline($req_data['to_client_id']))
{
// 假設(shè)your_store_fun是用來保存未讀消息的函數(shù)(這個(gè)函數(shù)不存在,需要自己實(shí)現(xiàn))
your_store_fun($message);
}
else
{
// 在線就轉(zhuǎn)發(fā)消息給對應(yīng)的客戶端
Gateway::sendToClient($req_data['to_client_id'], $req_data['content']);
}
}
}
...
}