Аякс против Socket.io
Я занимаюсь разработкой веб-приложения, и мне было интересно, какой метод должен подходить для моего проекта.
По сути, я хочу показать пользователям некоторые уведомления, которые берутся из запросов на другие серверы. Мое приложение node.js получает всю информацию, а затем распространяется среди пользователей, сохраняя копию в моем MongoDB.
Идея довольно проста, но, читая о методах, я нашел эти два метода:
Ajax: Клиентская сторона будет постоянно проверять наличие нового содержимого на сервере. Это можно сделать с помощью jquery ajax get to my server API (каждые 30/60 секунд).
Socket.io: клиент подключается один раз, а затем поддерживается постоянное TCP-соединение (больше в реальном времени).
Теперь я объяснил ситуацию, у меня есть следующие вопросы:
Не будет ли у меня слишком много запросов с ajax? представьте, что я хочу каждую минуту проверять сервер, если мы масштабируем приложение до 100 пользователей, оно даст мне 100 запросов в минуту. Было бы "дешевле" в системных ресурсах иметь сокет?
Будет ли socket.io проблемой для мобильных устройств? полоса пропускания и производительность. Ответом сервера всегда является информация в формате JSON.
Я читал, что now.js может использоваться для этого, но кажется, что проект больше не поддерживается, поэтому не уверен, что его использование будет хорошей идеей.
Как происходит кэширование на обоих методах? Я думал о создании файла кэша для каждого пользователя, и он будет обновляться с помощью node.js на стороне сервера. Я думаю, что это может очень хорошо работать с ajax, но как насчет socket.io?
Правда ли, что socket.io вообще не совместим со многими браузерами? Мое приложение было бы более ориентировано на мобильные устройства, и я думаю, что это могло бы заставить меня задуматься о выборе AJAX.
Любая альтернатива предложена?
Я надеюсь, что это может очистить мой разум и других, которые находятся в такой же ситуации:) Спасибо
1 ответ
Многие из общих компромиссов между webSocket и Ajax обсуждаются здесь:
websocket vs rest API для данных в реальном времени?
Некоторые проблемы компромисса для мобильных устройств обсуждаются здесь:
Кордова: Сокеты, PushNotifications или многократный опрос сервера?
Короче говоря, если ваши данные в основном управляются сервером, а затем должны быть отправлены клиентам, и вы хотите довольно хорошую задержку, когда клиенты видят новые данные, то это именно та проблема, для которой подходят webSockets. webSockets лучше всего работают в этой ситуации, потому что клиенту не нужно часто опрашивать, серверу не нужно обрабатывать регулярные запросы опроса от большого количества клиентов. Вместо этого каждый клиент просто устанавливает один постоянный канал связи webSocket, по которому сервер может в любое время отправлять данные по требованию.
Не будет ли у меня слишком много запросов с ajax? представьте, что я хочу каждую минуту проверять сервер, если мы масштабируем приложение до 100 пользователей, оно даст мне 100 запросов в минуту. Было бы "дешевле" в системных ресурсах иметь сокет?
Сокеты требуют очень мало ресурсов, когда они не активны, так что да, постоянный webSocket более эффективен, чем бесконечный опрос большого количества клиентов. Вот почему webSockets были изобретены, потому что они лучше в решении этой конкретной проблемы.
Будет ли socket.io проблемой для мобильных устройств? полоса пропускания и производительность. Ответом сервера всегда является информация в формате JSON.
socket.io не является проблемой для пропускной способности или производительности. Есть некоторые проблемы с мобильностью при попытке использовать webSockets в фоновом режиме, потому что мобильные устройства также пытаются осуществлять активное управление питанием, хотя аналогичная проблема существует и при опросе клиентов.
Как происходит кэширование на обоих методах? Я думал о создании файла кэша для каждого пользователя, и он будет обновляться с помощью node.js на стороне сервера. Я думаю, что это может очень хорошо работать с ajax, но как насчет socket.io?
Неясно, что вы спрашиваете о кешировании? В реализации webSocket сервер получает данные, а затем просто отправляет их каждому пользователю. Обычно не требуется кэширование на стороне сервера. В реализации опроса клиента Ajax сервер должен где-то хранить данные и "ждать", пока каждый клиент не запросит данные. Не существует "встроенного" механизма кэширования ни для webSocket, ни для Ajax.
Правда ли, что socket.io вообще не совместим со многими браузерами? Мое приложение было бы более ориентировано на мобильные устройства, и я думаю, что это могло бы заставить меня задуматься о выборе AJAX.
socket.io полностью совместим со всеми браузерами, в которых есть webSockets, что в значительной степени используется сегодня, кроме IE9 и старше. Если вы используете библиотеку socket.io, она автоматически вернется к длительному опросу, если webSockets не существует. Ваши проблемы с мобильными устройствами, вероятно, будут похожими, будь вы проводите регулярный опрос или webSocket, потому что мобильное устройство хочет управлять электропитанием долго выполняющихся вещей, но вы не хотите останавливать опрос. Я не думаю, что это причина, чтобы избежать webSockets / socket.io. В socket.io есть очень хорошая логика автоматического переподключения всякий раз, когда он теряет соединение, что может быть очень полезно.
В мобильном мире, я думаю, вы просто обнаружите, что вы не можете надежно делать уведомления в реальном времени в фоновом режиме, не используя какой-то родной компонент приложения, который может подключаться к собственной "push" системе на устройстве, потому что Это единственная система, которая эффективно работает от батареи и полностью совместима с управлением питанием. Веб-страница будет управляться с помощью электропитания, как только она не станет основной задачей или когда устройство не будет работать.