目前我正在使用Websocket,我需要在创建Websocket连接时发送一些像用户ID这样的数据。 我找到了解决方案,例如我们可以在Websocket连接URL的末尾发送值
ws:/localhost:10001/websocket/server.php/456
但他们在代码中使用Node.js.他们通过
阅读了456websocket.upgradeReq.url
没有Node.js怎么做 它将在http请求的请求URL中发送out值456。 我怀疑的是如何在server.php中读取该值。这里server.php通过我的自定义逻辑处理所有客户端请求。我尝试将在server.php中创建的套接字连接分配给当前值参数(456),如
$clients['456'] = $socketConnection;
任何人都可以给出解决方案。提前致谢
答案 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