Ответ 1
Многие из общих компромиссов между webSocket и Ajax обсуждаются здесь:
websocket vs rest API для данных в реальном времени?
Некоторые проблемы компромиссов для мобильных устройств обсуждаются здесь:
Кордова: Сокеты, PushNotifications или многократно опросный сервер?
В двух словах, если ваши данные в основном управляются сервером и затем должны быть отправлены клиентам, и вы хотите достаточно хорошую задержку, когда клиенты видят новые данные, то это точная проблема, с которой веб-сокеты хороши для, webSockets работают лучше всего в этой ситуации, потому что клиенту не нужно часто опроса, сервер не должен обрабатывать регулярные запросы опроса от множества клиентов. Вместо этого каждый клиент просто устанавливает один постоянный канал связи WebSocket, который сервер может затем отправлять данные по запросу в любое время.
Не было бы у меня слишком много запросов с ajax? представьте, я хочу проверить каждую минуту на сервер, если мы масштабируем приложение до 100 пользователей, это будет дайте мне 100 запросов в минуту. Было бы "дешевле" в системе ресурсов, чтобы иметь сокет?
Сокеты требуют очень мало ресурсов, когда они неактивны, так что да, постоянный webSocket более эффективен, чем много опросов клиентов бесконечно. Вот почему webSockets были изобретены, потому что они лучше справляются с этой конкретной проблемой.
Будет ли socket.io проблемой для мобильных устройств? полосы и представление. Ответ сервера всегда является информацией в формате JSON.
socket.io не является проблемой для полосы пропускания или производительности. Есть некоторые проблемы с мобильностью при попытке использования web-сокетов в фоновом режиме, поскольку мобильные устройства также пытаются активировать управление питанием, хотя подобная проблема возникает и при опросе клиентов.
Как кэширование обоих методов? Я собирался создать кэш файл для каждого пользователя, и это будет обновляться с помощью node.js в на стороне сервера. Я думаю, это может отлично работать с ajax, но как насчет socket.io?
Непонятно, что вы спрашиваете о кешировании? В реализации webSocket сервер получает данные, а затем просто отправляет их каждому пользователю. В общем случае кэширование на стороне сервера не требуется. В реализации запроса клиента Ajax сервер должен будет хранить данные где-то и "ждать" для каждого клиента, чтобы затем запросить данные. Нет никакого "встроенного" механизма кэширования для websocket или Ajax.
Правда ли, что socket.io несовместим вообще со многими браузерами? Мое приложение будет больше ориентировано на мобильные устройства, и я думаю, что это может заставить меня задуматься о выборе ajax.
socket.io полностью совместим со всеми браузерами, у которых есть веб-узлы, которые в значительной степени используются сегодня, кроме IE9 и старше. Если вы используете библиотеку socket.io, она автоматически возвращается к длительному опросу, если веб-сокеты не существуют. Вероятно, ваши проблемы с мобильностью будут одинаковыми, независимо от того, выполняете ли вы обычный опрос или веб-узел, потому что мобильное устройство хочет управлять долговременными вещами, но вы не хотите прекращать опрос. Я не думаю, что это причина для того, чтобы избежать использования webSockets/socket.io. socket.io имеет некоторую действительно приятную логику автоматического повторного подключения, когда он теряет соединение, которое может быть действительно полезным.
В мобильном мире, я думаю, вы просто обнаружите, что не можете надежно делать уведомления в режиме реального времени в фоновом режиме, не используя какой-то родной компонент приложения, который может подключаться к собственной "push" системе на потому что это единственная система, которая одновременно эффективна и полностью совместима с управлением питанием. Веб-страница будет управляться электропитанием, как только это не будет задачей переднего плана или когда устройство не работает.