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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 10:32
400000 руб./за проект
24 апр. 2024, в 10:12
10000 руб./за проект