Доброе утро всем,
Кажется, у меня проблема, которая сводит меня с ума, потому что я абсолютно не знаю, где искать.
Чтобы получить опыт работы с веб-сокетами, я хочу настроитьСервер 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/