Как использовать ArrayBuffer / ArrayBufferView для отправки массива Javascript строк и целых чисел через WebSocket? - PullRequest
0 голосов
/ 05 апреля 2019

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

Клиентская сторона:

var username = 'Ben2';
var age = 24;
var currentScore = 60;
var userData = {
    Username: username,
    Age: age,
    CurrentScore: currentScore
};
socket.send(JSON.stringify(userData));

Сторона сервера:

socket.onmessage = function(event){
    var data = JSON.parse(event.data);
    User.username = data.Username;
    User.age = data.Age;
    User.currentScore= data.CurrentScore;
}

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

Клиентская сторона:

var username = 'Ben2';
var age = 24;
var currentScore = 60;
var data = new Uint16Array([username,age,currentScore])
socket.send(data);

Сторона сервера:

socket.onmessage = function(event){
    var data = JSON.parse(event.data);
    User.username = data[0];
    User.age = data[1];
    User.currentScore= data[2];
}

Это будет работать, если все значения, которые я отправляю, являются числами, но поскольку я использую строку для имени пользователя, она не совместима с массивом типов. Как бы я справился с этим / являются ли массивы типов правильным подходом для этой ситуации, и действительно ли этот метод реально помогает уменьшить пропускную способность? Возможно, я не совсем понимаю концепцию преобразования объектов в двоичные.

...