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 应该有你需要的一切。
当前设计
我正在制作一个聊天应用程序,任何 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 应该有你需要的一切。