У меня возникли проблемы с Socket.io в отношении утечек памяти и проблем с масштабированием в последнее время. Мое решение использовать Socket.io было сделано более года назад, когда это была, несомненно, лучшая библиотека для использования.
Теперь, когда Socket.io вызывает много проблем, я потратил время на поиск альтернатив, которые стали доступны в то же время, и думаю, что оба Engine.io и SockJS в целом хорошо подходят для меня. Однако, на мой взгляд, у обоих есть некоторые недостатки, и я не уверен, какой из них выбрать.
Engine.io - это в основном идеальная облегченная версия Socket.io, которая не содержит всех функций, которые мне не нужны. Я уже написал свою собственную логику повторного подключения и heartbeat для Socket.io, потому что меня не устраивали логики по умолчанию, и я никогда не собирался использовать комнаты или другие функции, которые предлагает Socket.io.
Но, по-моему, основным недостатком Engine.io является установление соединений. Клиенты начинают с более медленного jsonp-опроса и обновляются, если они поддерживают более качественный транспорт. Тот факт, что клиенты, которые поддерживают веб-сайты изначально (число, постоянно увеличивающееся), имеют недостаток в форме более длительной и нестойкой процедуры подключения по сравнению с теми клиентами, которые используют устаревшие браузеры, что противоречит моему пониманию того, как ее следует обрабатывать.
SockJS, с другой стороны, обрабатывает соединения точно так, как я хотел бы. Из того, что я прочитал, он выглядит довольно стабильным, в то время как у Engine.io есть некоторые проблемы в это время.
Мое приложение работает за маршрутизатором Nginx в одном домене, поэтому мне не нужны функции межсетевого домена, предлагаемые SockJS. Однако из-за предоставления этой функции SockJS вообще не раскрывает данные cookie клиента. До сих пор у меня было 2-факторное разрешение с Socket.io через токен строки cookie AND, и это было бы невозможно с SockJS (с Engine.io это было бы).
Я прочитал почти все то, что avilable, и плюсы и минусы обоих, но похоже, что пока мало что обсуждается или публикуется, особенно в Engine.io(есть только 8 вопросов, отмеченных с помощью engine.io здесь).
-
Какую из двух библиотек вы предпочитаете и по какой причине? Используете ли вы их в производстве?
-
Какой из них, вероятно, будет поддерживаться более активно и может иметь важное преимущество перед другим в будущем?