@Stepanho

Ajax vs websockets?

Доброго дня.

Планируется разработка мобильного веб-приложения (Node.JS Express | Vue.JS).
Предполагается, что понадобится быстрая реакция системы на действия пользователя и извне, в том числе и при плохом соединении. Поэтому для некоторых задач ("пинг" клиентов для отображения состояния соединения, отправка сообщений друг другу и т. д.) решил использовать веб-сокеты, а именно Socket.IO.

Вопрос в клиент-серверном взаимодействии. Обычно большинство вещей подгружается с помощью ajax http запросов. Но зачем открывать http соединение, если уже открыто и доступно сокет соединение?
Как лучше поступить: написать небольшой адаптер для отправки запросов через сокет и работать только с ним или в использовать ajax для запросов общего назначения и socket для специфики?
  • Вопрос задан
  • 609 просмотров
Решения вопроса 3
DevMan
@DevMan Куратор тега Веб-разработка
в чем проблема открыть дополнительный коннект?
сокеты рулят, если нужна двухсторонняя связь.
аякс рулит, когда нужна односторонняя связь.
Ответ написан
@PavelPikat
Сокеты имеют преимущество перед HTTP в том, что соединение устанавливается только 1 раз в начале, и после этого при каждом обмене данным handshakeне происходит, не пересылаются заголовки туда-сюда, соответственно это работает пошустрее и штрафика жрет меньше.

Но нужно иметь ввиду и недостатки: первичное соединение у сокетов устанавливается гораздо дольше чем простой HTTP запрос, нагрузка на сервер несомненно выше - 1 сервер скорее всего не сможет поддерживать больше чем N-ое количество открытых соединений (напр. 10,000)

P.S не советую с сокетами делать "пинги" или "поллы", т.к. это будет только нагружать CPU и жрать батарею. Сокеты в состоянии покоя (когда данных нет) вообще ничего не жрут и WiFi может уходить в sleep-mode
Ответ написан
Комментировать
@rPman
websocket однозначно предпочтительнее http get/post

Рекомендую обратить внимание на http/2 (или quic) протокол (апгрейд устаревающего http), в нем ввели очень много вкусняшек именно для ускорения... почти все современные браузеры его уже поддерживают (кроме opera mini и всех ie), правда websocket и webrtc с ним требуют активных тестов.

Еще есть направление (не как замена а как дополнение к client-server) используйте webrtc (тоже поддерживается всеми) для связи пользователей друг с другом напрямую, отсылая сообщения одновременно через сервер и напрямую клиентам можно повысить шансы и скорость (речь о десятке миллисекунд против сотен), но само собой итог будет сильно зависеть от географического положения и отношения провайдеров к client-client подключениям.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы