问候 stackoverflow 的人们,在过去的几天里,我一直在研究 websockets 和一个名为 Ratchet 的 PHP 库(它非常适合用 PHP 编写 websockets 服务器应用程序)。在 Ratchet 官方文档中,他们建议使用 SplObjectStorage(我从未听说过)来管理客户端连接对象。
在大多数服务器应用程序中,您可能需要保留有关每个客户端的一些数据(例如,在我正在尝试编写一个简单的消息传递服务器的情况下,我需要保留诸如客户端昵称之类的数据,也许还有更多),所以据我了解它,当像下面这样打开新连接时,我可以将客户端对象和包含客户端数据的数组添加到 SplObjectStorage。
public function onOpen(ConnectionInterface $conn) {
//$this->clients is the SplObjectStorage object
$this->clients[$conn] = array('id' => $conn->resourceId, 'nickname' => '');
}
但是,我不确定通过数据数组中的值(如用户昵称)从 SplObjectStorage 获取对象的最佳方法是什么,一种方法是这样的:
//$this->clients is my SplObjectStorage object where I keep all incoming connections
foreach($this->clients as $client){
$data = $this->clients->offsetGet($client);
if($data['nickname'] == $NickNameIAmLookingFor){
//Return the $client object or do something nice
}
}
但我觉得有更好的方法可以做到这一点,所以任何建议都将不胜感激。
提前致谢。