Приветствую вас, люди из stackoverflow, в последние дни я смотрю на веб-сокеты и PHP-библиотеку под названием Ratchet (которая идеально подходит для написания серверных приложений веб-сокетов на PHP). В официальной документации 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
}
}
Но я чувствую, что есть лучший способ сделать это, поэтому любые советы будут очень признательны.
Заранее спасибо.