Простой Websocket Server с PHP7.2 и Apache: формат socket_read - PullRequest
1 голос
/ 27 апреля 2019

Доброе утро всем,

Кажется, у меня проблема, которая сводит меня с ума, потому что я абсолютно не знаю, где искать.

Чтобы получить опыт работы с веб-сокетами, я хочу настроитьСервер Websocket с PHP и Apache.Объединив решения:

https://medium.com/@cn007b/super-simple-php-websocket-example-ea2cd5893575

и

https://www.php.net/manual/de/sockets.examples.php

, я смог получить работающий эхо-сервер.Это означает, что я могу отправить сообщение из браузера, и сервер ответил этим сообщением.Вот фрагмент кода.

do {
if (false === ($buf = socket_read($client,2048))) {
   echo "socket_read() fehlgeschlagen: Grund: " .  socket_strerror(socket_last_error($client)) . "\n";
   break 2;
}
echo $buf; // <--- this line shows "crypted" text
socket_write ($client, $buf, strlen ($buf));
} while (true);

Я запускаю этот сервер в консоли с помощью php websocket.php, а прокси-сервер в Apache перенаправляет запросы.

Моя проблема в том, что переменная $ bufкаким-то образом зашифрован, двоичен, упакован или неправильно закодирован.Он выдает нечитаемые знаки:

?? ǐl ??????

После отправки его обратно в браузер все становится читаемым человеком.Я изучил много постов в интернете и на stackoverflow.Я не знаю, с чего начать, потому что в документации сказано, что это должна быть строка.Все примеры, которые я нашел в интернете, не имеют особой заботы о «переводе» этой строки $ buf, так что я совершенно запутался, где искать: Apache ?, PHP.ini ?, консоль, кодирование, распаковка

На основании прочитанного я немного поэкспериментировал с:

//$talkback = "PHP: Sie haben '$buf' eingegeben.\n";
//var_dump(mb_convert_encoding($buf,"UTF-8"));
//$unpacked = unpack('Clength',socket_read($client,1));
//var_export($unpacked);
//$msg = socket_read($client, $unpacked['length']);
//echo implode(array_map("chr", $msg));

Но безуспешно.Вы можете мне помочь?

Обновление:

После хорошего сна я нашел правильный вопрос, а затем очень быстро ответил:

Отправная точка для объяснения:

Декодирование сетевых символов (HTML5 Websocket)

Пример декодирования:

HTML5 WebSocket с hybi-17

И пример кода для кодирования / декодирования:

http://www.abrandao.com/2013/06/websockets-html5-php/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...