当前设计
我正在制作一个聊天应用程序,任何2个随机用户都可以在这里聊天。
在服务器上(在php中),我有一个存储客户端对的数组,用于访问这些对的密钥是客户端ID之一。
我不喜欢这个的原因是我必须将客户端对存储在数组中两次。我不知道哪个客户端会先断开连接,所以我将它哈希两次,每个客户端ID一次。
如果还不清楚,那么过程是: 客户A和B正在聊天。 客户端B断开连接,因此我使用密钥B访问该对,找出其他客户端的ID为A,然后使用密钥A和B取消设置这两个元素。
问题
有更好的想法吗? 如果可以使用2个键来访问数组中完全相同的元素,那将会很好,但我认为不存在。
P.S。
(根据描述,此客户端对象可能听起来没用,但它也保存了每个客户端的相应套接字,当发生断开连接时,我可以使用该套接字从服务器发送消息。)
我是如何用代码描绘的:
/* The server receives a message from a client with id 1000 that he has left chat */
$client_pairs = array(); //map holding all client pairs currently chatting
connectClients( $client1, $client2 )
{
$client_pairs[$client1 -> id] = array( $client1, $client2 );
$client_pairs[$client2 -> id] = array( $client2, $client1 );
}
disconnectClient( $client_id )
{
$client_pair = $this -> client_pairs[$client_id]
$client2 = $client_pair[1];
unset( client_pairs[$client_id] );
unset( client_pairs[$client2 -> id] );
/*
do stuff with the $client_pair
*/
}
答案 0 :(得分:1)
你可以有两个数组:$ users和$ sessions。例如,让我们说,你有两个用户:client_id1和client_id2。然后你可以:
$sessions[] = your session information, e.g. sockets, plus both client_ids
end($sessions);
$sessId = key($sessions);
$users[$cliend_id1] = $sessId;
$users[$cliend_id2] = $sessId;
当有人断开连接时,请将其ID用作:
$sess = $sessions[$users[$id]];
$ sess然后应该拥有你需要的一切。