客戶端和gateway保持著socket長(zhǎng)連接,這個(gè)連接斷開(kāi)就代表客戶端下線。所以判斷某個(gè)客戶端是否在線,就判斷對(duì)應(yīng)的socket連接是否斷開(kāi)即可。在workerman中如果某個(gè)socket斷開(kāi),workerman會(huì)立刻檢測(cè)到,然后會(huì)將該客戶端的連接數(shù)據(jù)清理。
當(dāng)使用Gateway::isOnline($client_id)時(shí),實(shí)際上就是去gateway上判斷對(duì)應(yīng)的$client_id對(duì)應(yīng)的連接信息是否存在,在就代表在線,不存在就代表下線。
迫使客戶端下線原理是服務(wù)端gateway主動(dòng)斷開(kāi)與客戶端的連接,并清理對(duì)應(yīng)client_id的連接數(shù)據(jù)。