Chrome DevTools показывает пустой исходящий двоичный фрейм веб-сокета, когда он на самом деле не пустой - PullRequest
0 голосов
/ 13 мая 2019

Chrome DevTools недавно получил возможность предварительного просмотра фреймов двоичных веб-сокетов:

Просмотрщик двоичных сообщений WebSocket

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

Мой тестовый код клиента выглядит следующим образом:

const blob = new Blob(['BINARY']);
webSocket.send(blob);

И сервер просто отправляет запрос:

await socket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), WebSocketMessageType.Binary, result.EndOfMessage, CancellationToken.None);

Вы можете увидеть полную реализацию сервера и клиента в моем репозитории GitHub .

Исходящий фрейм:

outgoing frame

Входящий кадр:

icoming frame

Что может быть причиной того, что Chrome отображает исходящиекадр неправильно?Возможно, я неправильно строю блоб?

1 Ответ

0 голосов
/ 18 мая 2019

Это действительно ошибка Chrome, моя ошибка Chromium https://crbug.com/962857 отслеживает прогресс в ней.

Обходной путь - отправлять двоичные кадры, предоставляя ArrayBuffer или типизированные массивы, а не Blob с.

Пример, который кодирует строку в типизированный массив (Uint8Array) и отправляет ее следующим образом:

const uint8Array = new TextEncoder().encode('BINARY');
webSocket.send(uint8Array);

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