Альтернатива socket.io

140
15 ноября 2018, 22:50

У нас фронт на angular и бэк на node.js.

До этого всегда использовал для вэбсокет транспорта библиотеку socket.io и горя не знал.

Но вот начинаем новый проект, в котором наш сервер будет отдавать данные не только вэб-приложению, но и мобильному приложению. Мобильное приложение пишут другие подрядчики. И получается, что сейчас использовать socket.io я не могу т.к. она осуществляет транспорт по "псевдо-вэбсокетам" и парни из мобилки не смогут подключиться к моему каналу. А использовать на мобильной платформе js-библиотеку не самое лучшее решение и они на это конечно не пойдут и правильно сделают.

Посоветуйте пожалуйста стабильную, быструю, поддерживаемую разработчиками, с лаконичным синтаксисом, работающую с "настоящими" вэбсокетами библиотеку.

Answer 1

И получается, что сейчас использовать socket.io я не могу т.к. она осуществляет транспорт по "псевдо-вэбсокетам" и парни из мобилки не смогут подключиться к моему каналу.

1) "псевдо-вэбсокетам"

мне кажется, что socket.io использует самые обычные сокеты, просто первое подключение происходит поверх http, для согласования. В результате согласования выясняется переходить на сокеты (клиент поддерживает их) или остаться на http (pooling).

2) не смогут подключиться

https://www.npmjs.com/package/socket.io

Some implementations in other languages are also available:

  • Java
  • C++
  • Swift
  • Dart

3) если всё же хочется использовать только ws

на сколько я понимаю в приведённом ниже ответе рассказывается как использовать socket.io без http pooling

https://stackoverflow.com/a/28240802/4794368

There are two types of "upgrades" happening with socket.io. First (in socket.io 1.0+), socket.io starts all connections with an http polling request and it may actually exchange some initial data with just an http request. Then, at some point after that, it will try to actually initiate a webSocket connection.

You can prevent the initial http polling entirely by doing this on the client:
var socket = io({transports: ['websocket'], upgrade: false});
This will prevent polling connections from your own cooperating clients. If you want to prevent any clients from ever using polling, then you can add this to the server:
io.set('transports', ['websocket']);
But, if you set this on the server, socket.io clients that are initially connecting with http polling will not work at all. So, this should only be matched with the right settings in the client such that the client never starts with polling.

UPD1:

socket.io/docs

By default, a long-polling connection is established first, then upgraded to “better” transports (like WebSocket).

а тут github.com/socketio/.../transports список протоколов

READ ALSO
Передать пароль при подключении по websocket

Передать пароль при подключении по websocket

Рефакторим один легаси проектВ нем таким вот образом устанавливается вэбсокет соединение между node

156
передача шаблона в шаблон с параметрами в express-handlebars

передача шаблона в шаблон с параметрами в express-handlebars

Проблема следующаяшаблон "index" загружается, в переменную body передаю шаблон, но в шаблон не передаются параметры для работы handlebars шаблонизатора

129