Прежде всего, express и socket.io - это довольно разные вещи. Express - это полноценная платформа веб-сервера. Вы используете его для настройки веб-сайта, отправки http-запросов из браузера, отправки http-запросов на API и т. Д. *
socket.io - это уровень связи, который находится поверх протокола webSocket, а протокол webSocket использует http-сервер для установления своего начального соединения. Хотя между тем, что вы можете сделать с помощью socket.io и Express, есть небольшое совпадение, они в большей степени отличаются друг от друга.
Например, если вы настраиваете веб-сайт, вы не можете сделать это с помощью socket.io, можно использовать что-то вроде Express.
Теперь, если у вас есть особая программная потребность в связи между произвольным клиентом и сервером, у вас есть миллионы вариантов. Если клиент находится в браузере, а программный интерфейс от Javascript в браузере, тогда у вас меньше вариантов.
Из браузера использование HTTP-запросов ajax через Express - один из вариантов. Настройка соединения с socket.io и определение собственных сообщений - это еще один выбор.
Причины выбирать socket.io вместо вызовов Ajax Express из браузера Javascript:
- Вам нужна / нужна двусторонняя связь по одному и тому же каналу.
- Клиент отправляет много запросов на сервер (издержки на отправку сообщения socket.io ниже, чем при вызове ajax, если сокет уже настроен, поэтому, если вы отправляете много сообщений, тогда сообщения socket.io более эффективны, чем запросы http)
Причины для выбора вызовов Ajax в Express:
- HTTP-соединения не имеют состояния и недолговечны, что может упростить реализацию многосерверных реализаций с отказоустойчивостью и избыточностью.
- Существует множество инструментов, которые можно использовать для http-соединений от библиотек аутентификации до форматов данных (MIME), аудио и видео и т. Д. *
- Вы хотите, чтобы ваш клиент работал в местах, где долго подключенный socket.io в неактивные периоды времени может быть непрактичным (например, мобильные устройства или устройства с батарейным питанием).
- Вы хотите работать в ситуациях, когда существуют прокси-серверы, брандмауэры или другая сетевая инфраструктура, которая может не поддерживать долго работающие соединения webSocket или специально запрещать их.
- Вы хотите модель запроса / ответа. HTTP - это запрос / ответ, где вы получаете конкретный ответ на каждый запрос, и вы точно знаете, какой ответ идет с каким запросом.
Итак, как вы можете видеть, нет общего ответа на этот вопрос. Это действительно зависит от специфики вашего общения, желаемой совместимости и точных потребностей вашего кода.
Вот еще несколько ссылок на эту тему:
Ajax vs Socket.io
Websocket и REST при отправке данных на сервер
Использование AJAX против сообщений сокетов socket.io
websocket vs rest API для данных в реальном времени?