【问题标题】:Send extra information on Websocket connection creation发送有关 Websocket 连接创建的额外信息
【发布时间】:2014-09-19 15:34:21
【问题描述】:

目前我正在开发 Websocket,我需要在建立 Websocket 连接时发送一些数据,例如用户 ID。 我找到了解决方案,例如我们可以在 Websocket 连接 url 的末尾发送值

ws:/localhost:10001/websocket/server.php/456

但他们在代码中使用了 Node.js。他们阅读了 456 by

websocket.upgradeReq.url

没有 Node.js 怎么办。 它将在 http 请求的请求 URL 中发送输出值 456。 我的疑问是如何在 server.php 中读取该值。这里 server.php 通过我的自定义逻辑处理所有客户端请求。我正在尝试将在 server.php 中创建的套接字连接分配给当前值参数(456),例如

$clients['456'] = $socketConnection;

谁能给出解决方案。提前致谢

【问题讨论】:

    标签: websocket


    【解决方案1】:

    很长一段时间后,我得到了我的问题的解决方案。代码流程是

    1.当我启动一个新的 Websocket 连接时,server.php 接受连接并管理数组中的客户端连接

    $socket_new = socket_accept($socket); //accept new socket
    $clients[] = $socket_new; //add socket to client array
    

    2.并向客户端发送socket接受消息

    @socket_write($socket_new ,$msg,strlen($msg));//$msg in object format
    

    3.当客户端从Websocket服务器接收到消息时,我将客户端ID发送到服务器

     ws.onMessage = function(event){
          ws.send(JSON.stringify({message:'clientRegistration',userId: 456}));
     }
    

    4.在 server.php 中,我编写自定义逻辑来处理所有客户端请求。当服务器收到消息时,代码如下所示

    while(socket_recv($changed_socket, $buf, 1024, 0) >= 1)
    {
            $received_text = unmask($buf); //unmask data
            $tst_msg = json_decode($received_text); //json decode
            if($tst_msg){
                $message = $tst_msg->message; //message text                
                if($message == 'clientRegistration'){
                    $clients[$tst_msg->userId] = $changed_socket;
                 }
                 //you can add your own code here
             }
    }
    

    5.最后,所有客户端连接都在我的手指中。如果我想将信息发送给客户端 '457' 意味着使用下面的代码

    @socket_write($clients[457],$msg,strlen($msg));//$msg in object format
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      相关资源
      最近更新 更多