很长一段时间后,我得到了我的问题的解决方案。代码流程是
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