每個(gè)頁(yè)面都這樣寫(xiě),到第二個(gè)頁(yè)面的時(shí)候client_id會(huì)刷新,我這么寫(xiě)應(yīng)該不對(duì)的吧?onopen是重新連接的吧?應(yīng)該要怎么寫(xiě)呢?
或者說(shuō)如何保存一個(gè)session,能保存uid,就算client_id刷新了也可以通過(guò)uid綁定
<script>
ws = new WebSocket("ws://127.0.0.1:7272");
ws.onopen = function() {
console.log("The connection is successful.");
$message = '{"type":"login"}'
ws.send($message);
console.log("login");
};
ws.onmessage = function(e) {
console.log("收到服務(wù)端的消息:" + e.data);
var date={"type":"login"};
};
</script>
按官網(wǎng)的示例,綁定uid即可。
你的客戶端總有token、session、jwt之類的來(lái)標(biāo)識(shí)用戶身份。
然后,接口解析出uid,使用 Gateway::bindUid
綁定。
斷開(kāi)鏈接不是有回調(diào)嘛
/**
* 當(dāng)用戶斷開(kāi)連接時(shí)觸發(fā)的方法
* @param integer $client_id 斷開(kāi)連接的客戶端client_id
* @return void
*/
public static function onClose($client_id)
{
// 廣播 xxx logout
GateWay::sendToAll("client[$client_id] logout\n");
}
或者說(shuō)如何保存一個(gè)session,能保存uid,就算client_id刷新了也可以通過(guò)uid綁定
如果說(shuō)是更換頁(yè)面同一個(gè)用戶刷新了client_id,需要發(fā)送消息給所有的頁(yè)面,可以將同一個(gè)用戶的client_id綁定到一個(gè)組里面
void Gateway::joinGroup(string $client_id, mixed $group);
說(shuō)明:
void Gateway::sendToUid(mixed $uid, string $message);
向uid綁定的所有在線client_id發(fā)送數(shù)據(jù)。
注意:默認(rèn)uid與client_id是一對(duì)多的關(guān)系,如果當(dāng)前uid下綁定了多個(gè)client_id,則多個(gè)client_id對(duì)應(yīng)的客戶端都會(huì)收到消息,這類似于PC QQ和手機(jī)QQ同時(shí)在線接收消息。