@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: Проблема была в декодировании, неправильно считало длину тела.
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
toxa82
@toxa82
Вы неправильно читаете, в начале пакета идет размер текущего сообщения, нужно смотреть этот размер и после этого читать нужное кол-во байт. Лишнее оставлять для следующего пакета. Пакеты не всегда приходят в целом виде.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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