Я пишу клиентские серверы на основе WebSocket.
Я хочу отправить необработанные двоичные данные, которые затем декодируются клиентом.
Моя проблема двоякая:
в то время как манипуляции с двоичными данными в c ++ (язык, на котором я пишу серверы), просты, кажетсятрудно в Javascript.
Я обнаружил, что вы можете использовать ArrayBuffer
s и UInt8Array
s для выполнения большинства манипуляций, и это прекрасно работает для отправки сообщений.
Моя проблема в том, что когда я пытаюсь получить сообщения, если я объявляю сообщение двоичным на стороне сервера, оно отображается как Blob
на клиенте.Я попытался преобразовать BLOB-объект в ArrayBuffer
следующим образом:
ws.onmessage = function(evt) {
var data = null;
data = await new Response(evt.data).arrayBuffer();
}
Но это дает мне ошибку:
SyntaxError: await is only valid in async functions and async generators
Кажется, что этот метод является асинхронным, и, хотя я уверен, что я мог бы сделать это таким образом, в действительности он не кажется таким уж хорошим.
Я понял, что при отправке данных в виде текста evt.data
отображается в виде строки, что заставляет меня поверить, что я могу использовать формат JSON для пакетов вместо двоичного.
Я действительно не хочу использовать JSON, хотя некоторые пакеты будут заполнены большим количеством информации, и я боюсь, что это добавит ненужный раздув.
Я думаю, что я действительно хочу, чтобы иметь возможность читать evt.data
как ArrayBuffer
, потому что кажется, что это будет наиболее эффективным.