Задать вопрос
@Malis

Как различить сессии в Ratchet?

немного застрял на месте определения сессий, что я делаю сразу - отправляю от клиента такой запрос
websocket = new WebSocket(ServerWebSocket + "?RoomSession=" + RoomSession);

на сервере принимаю
protected $clients;
protected $RoomSession;
public function __construct(){
    $this->clients = new \SplObjectStorage;
    }
public function onOpen(ConnectionInterface $conn) {
    $this->clients->attach($conn);
    $this->RoomSession = "";
    $a = explode("=", $conn->httpRequest->getUri()->getQuery());
    $this->RoomSession = $a[1];
    if($this->RoomSession == ""){ $conn->close(); }else{ echo "Connected session => ".$this->RoomSession; }
    }

проверено, принимается, таким образом я уже клиента отметил определённой сессией, теперь осталось только одно, отправить другим с такой же сессией, в примере указано следующее
public function onMessage(ConnectionInterface $from, $msg) {
    $numRecv = count($this->clients) - 1;
    foreach($this->clients as $client) {
        if ($from !== $client) {
            $client->send($msg);
            }
        }
    }

строка if ($from !== $client) { указывает на то что отправить входящее сообщение всем кроме самого отправляющего, то есть тут нужно добавить условие что всем кто имеет сессию $this->RoomSession у кого такая же.
Вот тут я не понял как это указать...
  • Вопрос задан
  • 47 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Как вам удобно, так и делайте.
Например, можно хранить соединения не в общем массиве, а в ассоциативном вида
$this->clients = [
    'session_id_1' => [$conn1, $conn2, ...],
    'session_id_2' => [$conn5, $conn7, ...],
    ...
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы