Я использую репозиторий это для своего сервера WebSocket, единственная проблема, насколько я вижу, заключается в том, что он сгенерировал идентификаторы сокетов с
$i = 1;
while (isset($this->wsRead[$i])) $i++;
return $i;
Я хотел бы передать идентификатор сокету при подключении
ws://127.0.0.1:9300?id=12345
проблема в том, что я не знаю, как получить этот параметр GET до того, как будет назначен идентификатор. Я долго искал и ничего не нашел. Насколько я вижу, только эти функции могут получить заголовки: socket_read и socket_recv, но проблема в том, что они как-то блокировать рукопожатия, потому что если я их использую, то в браузере я могу видеть
failed: Error during WebSocket handshake: net::ERR_INVALID_HTTP_RESPONSE
Есть ли другие способы получить идентификатор, который я передаю при подключении?
Вы правы, я могу получить его там, но уже слишком поздно, поскольку на тот момент идентификатор уже был присвоен. Мне нужно получить заголовки в функции wsAddClient(), так как это место, где идентификатор присваивается сокету.
Зачем тебе вообще нужен ID? Разве вы не можете предоставить свой идентификатор с сообщением после того, как соединение было установлено, а затем отобразить его в своем коде, не касаясь библиотеки?
Я мог бы, и я делаю это прямо сейчас, но это означает, что я должен указать идентификатор для всех сообщений, чтобы проверить, разрешено ли пользователю выполнять какие-либо действия в WS.
мое предложение состояло в том, чтобы отправить идентификатор в первое сообщение, а затем сохранить предоставленный вами идентификатор в массиве, используя идентификатор сокета в качестве ключа. Затем для любого действия вы можете найти предоставленный идентификатор для текущего соединения.






В методе
wsProcessClientHandshakeбиблиотеки вы можете найти его в переменной$request. Но я не уверен