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

Feof, wss почему проскальзывает 2 значения, а расшифровывается только первое?

while (!feof($fp)) {
            $stat = fstat($fp);
            $fp2 = fread($fp, 8192);
            $new = time();
            $fp2 = decode($fp2);
            if ($fp2['opcode'] == 9) {
                fwrite($fp, encode($new, 'ping'));
                echo "\nPING\n\n";
            };
            if (isset(json_decode($fp2['message'])->data->p)) $fp3 = json_decode($fp2['message'])->data->p;
            if (isset($fp3)) echo $fp3."\n";
        }


В большинстве случаев всё нормально, но иногда цепляется второй пакет с символами для шифрования wss в начале. Думаю, что проблема на стороне сервера, проскальзывает без окончания строки, но может есть ещё что-то? Например из-за sleep-а

UPD: Проблема была в декодировании, неправильно считало длину тела.
  • Вопрос задан
  • 134 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
toxa82
@toxa82
Вы неправильно читаете, в начале пакета идет размер текущего сообщения, нужно смотреть этот размер и после этого читать нужное кол-во байт. Лишнее оставлять для следующего пакета. Пакеты не всегда приходят в целом виде.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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