每個頁面都這樣寫,到第二個頁面的時候client_id會刷新,我這么寫應該不對的吧?onopen是重新連接的吧?應該要怎么寫呢?
或者說如何保存一個session,能保存uid,就算client_id刷新了也可以通過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("收到服務端的消息:" + e.data);
var date={"type":"login"};
};
</script>
按官網的示例,綁定uid即可。
斷開鏈接不是有回調嘛
/**
* 當用戶斷開連接時觸發(fā)的方法
* @param integer $client_id 斷開連接的客戶端client_id
* @return void
*/
public static function onClose($client_id)
{
// 廣播 xxx logout
GateWay::sendToAll("client[$client_id] logout\n");
}
或者說如何保存一個session,能保存uid,就算client_id刷新了也可以通過uid綁定
如果說是更換頁面同一個用戶刷新了client_id,需要發(fā)送消息給所有的頁面,可以將同一個用戶的client_id綁定到一個組里面
void Gateway::joinGroup(string $client_id, mixed $group);
說明:
void Gateway::sendToUid(mixed $uid, string $message);
向uid綁定的所有在線client_id發(fā)送數據。
注意:默認uid與client_id是一對多的關系,如果當前uid下綁定了多個client_id,則多個client_id對應的客戶端都會收到消息,這類似于PC QQ和手機QQ同時在線接收消息。