发送有关Websocket连接创建的额外信息

时间:2014-09-18 05:02:29

标签: websocket

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

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

但他们在代码中使用Node.js.他们通过

阅读了456
websocket.upgradeReq.url

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

$clients['456'] = $socketConnection;

任何人都可以给出解决方案。提前致谢

1 个答案:

答案 0 :(得分:2)

经过很长一段时间我得到了解决问题的方法。代码流是

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

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

2.并将套接字接受消息发送到客户端

@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