Зачем использовать ajax, если есть вебсокеты?

Если отбросить надуманную проблему поддержки websocket'ов (поддержка XMLHttpRequest: 92.52%, WebSockets: 92.13%, кроме того есть socket io), то зачем использовать аякс? Ведь можно получать данные через сокеты. Какие минусы у сокетов, по сранению с аяксом?
  • Вопрос задан
  • 1917 просмотров
Решения вопроса 5
l3ftoverz
@l3ftoverz Куратор тега JavaScript
Rings of Saturn - The Husk
WebSocket — протокол связи поверх TCP-соединения, предназначенный для обмена сообщениями между браузером и веб-сервером в режиме реального времени.


В то время как Ajax, это обычный request -> response, без перезагрузки страницы. (Если просто)
Кароче, это совершенно разные вещи, для разных задач.
Ответ написан
Разные технологии под разные задачи. Сравнивать некорректно. Вы же не будете делать отдельный вебсокет под простую отправку форму ос или аяксом долбить сервак чтобы получить новые сообщения в чатике?
Ответ написан
@alsii
PHP, Symfony, MySQL, etc...
WS - это не HTTP, поэтому:
- WS не проходит через прокси
- WS не кешируется (иногда это плюс)
- WS могут не проходить через firewall
- WS может быть недоступен на shared hosting.
- WS - обеспечивает передачу потока байт, поэтому придется придумывать какой-то протокол (и скорее всего не один: от сеансового уровня до уровня представления данных модели OSI) поверх WS и реализовывать его самостоятельно.
- WS требует постоянно открытого соединения. Соединение может оборваться, придется решать проблему целостности/подтверждения доставки. Кроме того это дополнительная нагрузка как на сервер, так и на клиента.

Одним словом WS имеют некоторые технические ограничения и при этом порождают множество задач, которые слабо связаны с предметной областью и которые придется решать при разработке приложения. Обычно когда разработчик сталкивается с такой ситуацией сразу же встает вопроc об использовании готовой библиотеки. Вышеупомянутая socket io - неплохой пример. Ко всему прочему в случае невозможности использования WS она прозрачно откатывается на long polling.

p.s. И да, есть еще server sent svents....
p.p.s. ...которые не работают в IE и Edge
Ответ написан
profesor08
@profesor08 Куратор тега JavaScript
Ну вот смотри. Вот у тебя есть обычный хостинг с пхп, раз так, то о каких вэбсокетах может идти речь, если хост может принять http запрос и отдать ответ? Другое дело, когда у тебя есть возможность на хосте постоянно держать соединение, тогда у тебя есть выбор. Если данные постоянно обновляются, то почему бы не сделать это на сокетах, а если нет, то и на фиг надо заморачиваться, сделал fetch и все.
Ответ написан
lightalex
@lightalex
Ajax - запрос-ответ. Можно делать несколько параллельных запросов, но гарантированно на каждый запрос придет соответствующий ему ответ.
WS - это постоянный поток данных между клиентом-сервером. Если нужно сделать запрос к серверу, сложно идентифицировать соответствующий ответ. Нужно дополнительно писать контроллер.
С помощью WS лучше делать какие-то односторонние вещи, не требующие ответа, с учетом того что WS гарантирует последовательность и целостность данных. Например сервер может понимать что у пользователя все еще открыта вкладка сайта. Или оповещения можно толкать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
18 сент. 2019, в 20:10
2000 руб./за проект
18 сент. 2019, в 19:07
150 руб./в час