В небольшом проекте, который я делаю, чтобы узнать больше, я пытаюсь использовать как можно меньшую полосу пропускания при использовании соединения через веб-сокет, и я прочитал, что использование двоичного формата немного легче, чем использование 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];
}
Это будет работать, если все значения, которые я отправляю, являются числами, но поскольку я использую строку для имени пользователя, она не совместима с массивом типов. Как бы я справился с этим / являются ли массивы типов правильным подходом для этой ситуации, и действительно ли этот метод реально помогает уменьшить пропускную способность? Возможно, я не совсем понимаю концепцию преобразования объектов в двоичные.