跳转页面后可以让client_id不变吗?

exzhang

如题

每个页面都这样写,到第二个页面的时候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>
275 2 0
2个回答

efnic

按官网的示例,绑定uid即可。

  • exzhang 2024-10-26

    uid怎么保存?断开连接后获取之前的uid

  • efnic 2024-10-26

    你的客户端总有token、session、jwt之类的来标识用户身份。
    然后,接口解析出uid,使用 Gateway::bindUid 绑定。

  • Risin9 2024-10-26

    断开链接不是有回调嘛

        /**
         * 当用户断开连接时触发的方法
         * @param integer $client_id 断开连接的客户端client_id
         * @return void
         */
        public static function onClose($client_id)
        {
           // 广播 xxx logout
           GateWay::sendToAll("client[$client_id] logout\n");
        }
  • Risin9 2024-10-26

    或者说如何保存一个session,能保存uid,就算client_id刷新了也可以通过uid绑定

    如果说是更换页面同一个用户刷新了client_id,需要发送消息给所有的页面,可以将同一个用户的client_id绑定到一个组里面

    void Gateway::joinGroup(string $client_id, mixed $group);
efnic

Gateway::sendToUid

说明:
void Gateway::sendToUid(mixed $uid, string $message);
向uid绑定的所有在线client_id发送数据

注意:默认uid与client_id是一对多的关系,如果当前uid下绑定了多个client_id,则多个client_id对应的客户端都会收到消息,这类似于PC QQ和手机QQ同时在线接收消息。

  • 暂无评论
×
🔝