MrBoriska
@MrBoriska
Пэхэпист самоучка, Питоност по Лутцу. C++

Есть ли смысл использовать BSON вместо JSON при общении по WebSocket?

В одном из проектов, который я сейчас начинаю делать, стоит задача в пересылке данных по протоколу WebSocket. На клиенте обычная "web морда" с логикой на javascript и в качестве сервера используется Tornado. По умолчанию Tornado работает с JSON (есть встроенные десериализатор и сериализатор). JSON отлично обрабатывается яваскриптом и не требует никаких танцев с бубном.

Так вот. Есть ли смысл использовать вместо JSON бинарный формат BSON?

На данный момент вижу такие плюсы:
  1. меньший трафик между клиент-сервер
  2. поддержка большего количества типов данных
  3. Вроде как более быстрая обработка формата.

И обнаруженные минусы:
  1. необходимость использования дополнительных библиотек/модулей для работы с форматом
  2. т.к. BSON данные приходят на клиент в формате blob/ArrayBuffer, то его приходится конвертировать в Uint8Array (TypedArray кароче говоря). Эта конвертация не внушает мне доверия. Не производительно. С другой стороны, может есть более элегантное решение это задачки? Что посоветуете?


Сейчас я принимаю ответ сервера так:
wsconnection = new WebSocket(---);
wsconnection.binaryType = 'arraybuffer';
wsconnection.onmessage = function (event) {
    console.log(BSON.deserialize(new Uint8Array(event.data)));
}


Может существует более разумное решение? Быть или не быть?

Предполагается пересылать в основном массивы данных небольшого размера. Но и хотелось бы иметь возможность пересылать файлы, в рамках формата(я имею в виду не статику. Статика будет под контролем nginx, если вы подумали...).

UPD:
Обновил код десериализации.
  • Вопрос задан
  • 5928 просмотров
Решения вопроса 1
MrBoriska
@MrBoriska Автор вопроса
Пэхэпист самоучка, Питоност по Лутцу. C++
В общем смысла нет. На сервере на чуточку быстрее обработка. На клиенте ощутимо медленнее. Вес на 2% меньше... Но при этом оно еще и не читабельно. BSON вместо JSON - ответ нет.

Попробовали MessagePack. Проверки скорости дали лучшие результаты, но запустить передачу на этом формате так и не удалось. Почему - неизвестно. Функция unpackb возвращает ошибку.

Итог:
Всем спасибо)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
koshak
@koshak
Посмотрите на msgpack.
Ответ написан
Комментировать
Tiendil
@Tiendil
Разработчик ПО.
А Вам хоть один из перечисленных плюсов критичен? То есть вы действительно в него упираетесь?

Если да, используйте, если нет — не надо.

KISS
Ответ написан
Eternalko
@Eternalko
KISS +1. Думаю смысла нет. Сами используем сокеты, смысла в BSON нет. Между серверами, да, там траффик большой.

> Эта конвертация не внушает мне доверия. Не производительно.
Зря. Операции binary самые быстрые которые только могут быть.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы