Я считаю, что все современные браузеры поддерживают сжатие веб-сокетов в форме "permessage-deflate". Однако, насколько я понимаю (и как следует из названия), это сжимает только каждое сообщение в отдельности. В моем случае (и, как я предполагаю, довольно часто) это бесполезно, так как я отправляю много маленьких сообщений JSON.
Существует ли какой-либо текущий или предлагаемый браузер для непрерывного сжатия? Мое исследование нашло экспериментальные расширения веб-сокетов, называемые deflate-stream и deflate-application-data, но они, похоже, умерли. Например, deflate-stream был удален из FireFox в 2011 . Это странно, так как это было бы очень полезно.
Мое текущее узкое место - пропускная способность сети, и я думаю, что мое приложение могло бы значительно выиграть от непрерывного (то есть "внутри-сообщения") сжатия. Например, мое самое распространенное сообщение обычно отправляется не реже одного раза в секунду, и для десятков тысяч веб-сокетов это начинает перегружать 100-мегабитное соединение. Это выглядит примерно так (без пробелов):
{
"Response": "i",
"Data": {
"AlwaysSameId": 12345678,
"Type": 0,
"Style": 0,
"Name": "long.similar.names.often.the.same",
"Time": 1532492191000000
}
}
, где большинство полей всегда или обычно одинаковы, и только поле времени всегда изменяется (но все еще похоже). Мои тесты показали, что с такого рода данными, используя сжатие «внутри сообщения», можно сжать JSON на 95% (это в 20 раз меньше!), Но сжатие «на сообщение» дает небольшое или никакое сокращение (так как словарь deflate должен быть отправляется каждый раз).
Я мог бы реализовать собственное сжатие внутри сообщения на более высоком уровне. (Я делал подобные вещи раньше в C, используя zlib 1.2.3) Это может быть немного утомительно, поскольку мне приходится реализовывать оба конца или, по крайней мере, направление с большинством данных - то есть сжимать в бэкэнд (Golang) и распаковать во внешнем интерфейсе (Javascript).
Я только после советов и разъяснений о том, что происходит со сжатием websocket.