php 单个值的多个键

php multiple keys for a single value

当前设计

我正在制作一个聊天应用程序,任何 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
    */
}

您可以有两个数组:$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 应该有你需要的一切。