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

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

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

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

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

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

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

Похожие вопросы