LINUX.ORG.RU

Вебсокеты вместо голых сокетов.

 ,


0

1

Можество софта использует свой протокол для обмена сообщениями между клиентом и сервером. Если на секунду отложить в сторону UDP протоколы, то практически все из них отправляют какие-то структуры (свои, Protobuf, Thrift, etc) по TCP сокету.

Почему бы им не перейти на веб-сокеты?

1) Проходимость возрастает, например всякие веб-прокси

2) Оверхед только при установлении соединения, потом минимальный оверхед на delimiting, который обычно и так нужен.

3) Появляется доступ не только из websocket клиента, но и с браузера напрямую. Например если по веб-сокету идет json или protobuf, то все становится совсем элементарным. Поддержка json родная, есть компилятор proto в JS

4) Расширяя пункт 3) у нас получается низкоуровненый кросс-языковой протокол. Так как websockets, их delimiting и proto внутри умеют почти все популярные языки.

5) SSL делается не сложнее чем для обычных сокетов, ws:// превращается в wss://. Браузеры тоже умеют, даже с клиентской аутентификацие по сертификату

Какие недостатки?

★★★★★

Последнее исправление: vertexua (всего исправлений: 2)

Недостаток в лишней сущности, когда она не нужна. Надо - юзаются, не надо - не юзаются

anonymous
()
Ответ на: комментарий от anonymous

Просто однажды написав такую библиотеку можно через нее общаться между своими серверами и между фронтендами и браузерами клиентов. Универсальность протокола терпит лишнюю в некоторых случаях сущность

vertexua ★★★★★
() автор топика

Вебсокеты — это хорошо. А вот их реализация — это плохо.

Если ты открыл 100 вкладок с сессиями, то HTTP это выдержит, а websocket поломается. Там ограничение на число соединений к одному серверу, причем очень небольшое, где-то от 4 до 16.

Для проксирования в nginx, во-первых, нужны лишние телодвижения, а во-вторых, у меня в свое время они так и не взлетели.

Если бы не такие грабли, то HTTP-сессии стоило бы вообще забыть.

anonymous
()

Какие недостатки?

отсутсвие нормальной реализации и кривые прокси,

у нас использовался свой бинарный протокол поверх http, есесно заложились что все работает через банальный http прокси.

при использовании Transfer-encoding chunked вся идея япревращалась в тыкву, и это весьма древний стандарт, а эти ваши вебсокеты еще свежее.

Deleted
()

1) Проходимость возрастает, например всякие веб-прокси

эта твоя идея будет способствовать ограничению этой самой проходимости для всех протоколов, кроме HTTP. Раз все используют только его, зачем нам остальные порты и протоколы, давайте всё заблокируем

интернет не создавался исключительно для HTTP

И вообще, чего мелочиться, пусть роутеры тоже на js работают, пакеты на нём маршрутизируют, в jsone закодированные

и ethernet заменим, встроим в сетевую карту аппаратный js-интерпретатор и вместо непонятных бинарных полей всё в json запихнём, будет круто и по-хипстерски

Harald ★★★★★
()
Ответ на: комментарий от anonymous

Если ты открыл 100 вкладок с сессиями, то HTTP это выдержит, а websocket поломается. Там ограничение на число соединений к одному серверу, причем очень небольшое, где-то от 4 до 16.

Уже решили: http://daniel.haxx.se/http2/

Почитай, чтобы быть в курсе, там все это описано.

gh0stwizard ★★★★★
()

Да всё верно написал. Один минус вс это с сжатием, дркгих проблем нету.

anonymous
()
Ответ на: комментарий от anonymous

А что со сжатием? Оно же вроде не жмет по дефолту, а жать можно самому если вообще нету режима сжатия

vertexua ★★★★★
() автор топика

> 1) Проходимость возрастает, например всякие веб-прокси

Есть такия птичка, наивняк.

Vit ★★★★★
()
Ответ на: комментарий от gh0stwizard

Спасибо, ознакомился.

Вот умеют же доки писать! С лего-картинками и русским переводом.

Но какой-то ядреный этот HTTP2. И не HTTP (гоняем не текст, а бинари), и не 2 (совместимость заявляют). Но вот лимит на соединения починили, факт.

anonymous
()
Ответ на: комментарий от vertexua

написав такую библиотеку можно через нее общаться между своими серверами

У нас на прошлой работе был rpc по вебсокетам между серверами, рабочая схема. Реализация websocket-клиента, правда немного подкачала, я подампил и пофиксил. Других серьезных проблем вроде небыло.

А между сервером и фронтом гонялся совершенно другой формат данных, поэтому логику мы не обобщали.

loz ★★★★★
()

А вобще хорошей заменой «голым» сокетам должен быть SCTP, но с его реализацией и поддержкой вобще борода, даже в эрланге на последних ядрах линукса у меня были проблемы, причину которых я так и не раскопал.

loz ★★★★★
()
Ответ на: SCTP от Chaser_Andrey

тыкал в него палочкой лет 5 назад — очень сырой был.

подозреваю, что ситуация с веб-сокетами не лучше.

anonymous
()

1) Проходимость возрастает, например всякие веб-прокси

и как там у вас, в стране эльфов?

anonymous
()
Ответ на: комментарий от anonymous

С веб-сокетами, к сожалению лучше. Намного. «К сожалению» - потому что в свете SCTP вебсокеты смотрятся велосипедом.

Chaser_Andrey ★★★★★
()
Ответ на: комментарий от vertexua

Браузер умеет

Довольно узкий юзкейс.

Сервисы по привычным url

Неплохо. Но реализуется элементарным первым сообщением в качестве handshake, где можно передать строку-url, или просто path.

Chaser_Andrey ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.