LINUX.ORG.RU

WebSocket vs. AJAX

 , , , ,


0

1

Я немного не понял назначения WebSocket. Имеет ли он те же функции, что комет? Имеет ли он те же функции, что AJAX? Имеет ли он то же назначение?
Правильно ли я понял, что современные браузеры поддерживают WebSocket нативно, а старые просто съедают один js-файл и вдруг начинают всё поддерживать?
Очень хочется отказаться от AJAX, ибо он устанавливает кучу лишних соединений. Что посоветуете?
Очень хочу примеров использования WebSocket как замены AJAX. Спасибо.

★★★★★

Все элементарно: это обычный сокет, т.е. мы имеем реальную асинхронную связь. А XHR такого не умеет.

Поддерживают только современные, JS тут не спасет. Я помаленьку пилил библиотечку для вебсокетов, не допилил еще до конца: то влом вдруг стало, то некогда.

Eddy_Em ☆☆☆☆☆
()

Время вебсокетов еще не настало, можно словить проблем на совершенно разных уровнях (фронт-энд, прокси, браузер). А вообще предназначен для постоянного двустороннего обмена данными, не ломая совместимость с обычным HTTP.

Очень хочется отказаться от AJAX, ибо он устанавливает кучу лишних соединений

Ничего он не устанавливает, все сервера давно умеют Keepalive.

Есть библиотеки, которые предоставляют механизм для обмена сообщениями с клиентом, используя что есть (вебсокеты, xhr).

note173 ★★★★★
()
Ответ на: комментарий от note173

Есть библиотеки, которые предоставляют механизм для обмена сообщениями с клиентом, используя что есть (вебсокеты, xhr).

Нет. Или я плохо искал: единственное, что нашел (почему и стал свое пилить) — cwebsockets почти двухлетней давности (естественно, нерабочая).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

JS тут не спасет

Почитал тут про websocket.io. Ещё про какие-то страшные уязвимости пишут, но это же пофиксят, так?

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

Там не хрень, а node.js. Хотя список фоллбэков (включая долбофлэш) делает сам socket.io хренью.

Интересно другое: они сам протокол уже устаканили? Застал время, когда он менялся еженедельно, @*%#&.

border-radius ★
()
Ответ на: комментарий от Eddy_Em

Где С?

В ядре и контроллерах, где ему и положено быть.

note173 ★★★★★
()
Ответ на: комментарий от Eddy_Em

Как раз в процессе фикса уязвимостей (хотя уязвимости ли это, вопрос спорный) они и меняли протокол весьма интенсивно.

border-radius ★
()
Ответ на: комментарий от CYB3R

Мдэ... по сравнению с тем, что я щупал, его усложнили до чёртиков... ну, хоть устаканили, и на том спасибо. Будем расчехляться.

border-radius ★
()

Socket.IO как фолбэк для сокетов если что. Штука для реалтаймого соеденения с сервером, сервер сам может инициировать отсыл информации. Недавно добавили поддержку в nginx и теперь можно откуда угодно работать с ними, без поддержки у бэкенда. Вообще штука полезная только для реалтайм чатов или игр, может коллаборативной работы, но в большинстве случаев для всего хватает Server-Sent Events - тоже самое почти, только сервер - клиент связь, а не двухсторонняя

wwwsevolod ★
()
Ответ на: комментарий от border-radius

Устаканили же! И стандарт уже нормальный, а не "демо".

// ничего, как понадобится — допишу библиотечку и буду юзать.

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

Збс

Хм, действительно, скачал простенький примерчик под ноду, УМВР и безо всяких соцкет.ио. Можно теперь пилить нетормозные пайпы к stdio консольных прог на вебморду.

border-radius ★
()
Ответ на: Збс от border-radius

Именно за этим я и начал ковырять AJAX, потом метнулся к вебсокетам :)

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от border-radius

я бы предпочел руби ноде. сама по себе идея создания ноды нормальная. а по факту нижайший порог вхождения породил цунами параши

punya ★★
()
Ответ на: комментарий от punya

Я бы предпочёл питон, но что-то мне подсказывает, что для ноды, а точнее, для V8, этот протолол куда нативнее, чем для любой другой технологии.

border-radius ★
()
Ответ на: комментарий от border-radius

Я бы предпочел tomcat, но очень лениво до седьмой версии обновляться.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от border-radius

нативнее в смысле раньше запилена поддержка?

в таком случае представляю вам посоны самое нативное выпадающее меню http://www.milonic.com/ ие3+. Я когда увидел это - со стула упал. А когда узнал что оно до сих пор используется - провалился на этаж ниже.

Распространяет эту парашу своим клиентам http://www.volusion.com/ за большую деньгу. Так вот к нам обратился очень жирный клиент и буквально плачет «сделайте что нибудь с этим меню. пожалуйста». Палить клиента не буду. вот пример сайта с тем же меню

+ НИКОГДА не обращайтесь на такие ынтырпрайз говносервисы

punya ★★
()
Последнее исправление: punya (всего исправлений: 1)
Ответ на: комментарий от punya

нативнее в смысле раньше запилена поддержка?

В смысле поддержка глубже встроена.

Я когда увидел это - со стула упал.

Аналогично.

border-radius ★
()
Ответ на: комментарий от border-radius

Было бы неплохо ссылку на гит. У меня фф с каким-то левым патчем на полноэкранный режим. Запускается он долго, а у меня целевая платформа — встраиваемые системы (знаю, что это извращение).

CYB3R ★★★★★
() автор топика

Недавно обсуждали же. Везде заменять не стоит, потому что траффик не пакуется.

Вебсокеты будут хороши, когда надо с сервера слать короткие нотификейшены клиенту (например, что-то сказали в чатике, или пришло письмо). Ну еще бывает, что надо с клиента серверу что-то короткое быстро слать, но это в основном в играх встречается.

Большинство библиотек предоставлят универсальный интерфейс, а как они там внутри повяжутся с вервером - вас волновать не будет.

Проблема только одна. Качество библиотек хреновое. В обсновном память течет. Хотя у меня были кейзы, когда человек мог законнектиться только эксплорером, потому что он не поддерживал вебсокеты и фолбечился на лонгполл. А фаерфокс и опера обламывались, и почему-то не делали откат на альтернативные протоколы.

В общем, если собираетесь внедрять - готовьтесь к массе увлекательных приключений. Естественно, получать задания на прохождение квестов вы будете в самый последний момент, когда все в продакшене.

Vit ★★★★★
()

Ах, да. Совсем забыл. Ни одна из библиотек, которые я знаю, не умеет шарить соединения между вкладками браузера.

Видимо, разработчикам эта функциональность не очевидна. Или они, как майкрософт, «предоставляют партнерам возможности для дополнения функционала».

Vit ★★★★★
()
Ответ на: комментарий от Vit

шаринг данных между вкладками реализуется с помощью событий которые генерирует localStorage (ie8+, в остальных случаях по таймеру) реализуется элементарно, даже соединение, хотя не во всем понимаю зачем, случаи когда нужно достаточно редки.

wwwsevolod ★
()
Ответ на: комментарий от Vit

Не умеет сжатие? А deflate-frame — это что?

А чтобы расшарить одно соединение между вкладками браузера есть какой-то костыль с использованием кук, ЕМНИП.

CYB3R ★★★★★
() автор топика

Имеет ли он те же функции, что AJAX? Имеет ли он то же назначение?

Всё же это немного разные вещи, хотя и с частично пересекающейся областью применения. Например, запрашивать какие-нибудь данные просто для отображения один раз (без реалтайма, постоянных обновлений и прочей обратной связи) гораздо проще через ajax.

Очень хочется отказаться от AJAX, ибо он устанавливает кучу лишних соединений.

Не он, а ты в своём коде:) Ещё не факт, кстати, что одно постоянно висящее соединение лучше, чем пара непостоянных коротких запросов. Всё зависит от задачи.

risenshnobel ★★★
()
Ответ на: комментарий от wwwsevolod

Вопрос не в том, как оно реализуется, а в том, какого хера это не включено в базовую поставку.

Vit ★★★★★
()
Ответ на: комментарий от CYB3R

Не поддерживает пока сжатие никто.

У меня на фонтелле 1000 уников в день, осенью гонял всё на вебсокетах. Вообще все запросы от клиента к серверу. Оказалось проще переключиться на аякс, чем добиться вменяемой работы. То количество косяков, которое вылезло на сервере и клиенте, в реальном продакшене с 30к уников мне нафик не надо.

Вебсокеты реально использовать во вторичных плюшках, которые не жалко если сломаются. Ну, например, если не придет сразу уведомление о почте или о новом сообщении в чате - никто не помрет, а большинство и не заметит даже.

Конечно, когда-нибудь библиотеки доведут до ума. НО (!) я пока не видел больших деплоев. И очень бы хотелось пообщаться с теми, у кого заработает. Потому что запуск на локалхосте в 2 экземплярах - это совсем не то.

Vit ★★★★★
()
Ответ на: комментарий от Vit

То есть, например, у меня есть страница, на которой будет выводиться список комнат чата. Допустим, кто-то создал новую комнату. Тогда клиенту по вебсокету приходит буквально «новая комната». После этого отправляется аякс запрос на сервер за моделью?? Или лучше по сокету прислать джисон этой модели??

blan4 ★
()
Ответ на: комментарий от blan4

Конечно сразу апдейт модели шлется. Там же относительно немного.

Вот если будете по клику на клиенте запрашивать вебсокетами обновления на 100-500 килобайт - сразу заметите что интерфейс тупит на несжатых данных. В этом случае аякс выгоднее. А еще проще и надежнее.

Vit ★★★★★
()
Ответ на: комментарий от Vit

https://groups.google.com/forum/?fromgroups=&hl=ru#!topic/faye-users/429V...

Вот пруф насчет текущей памяти. Джеймс еще един косяк зафиксил на той неделе. Кстати, этот же пакет используется в SockJS, так что не думаю, что с ним ситуация была лучше, как бы его не хвалили. Он просто менее распространен, поэтому меньше отзывов о фейлах

Vit ★★★★★
()
Ответ на: комментарий от CYB3R

Гита (пока) нет, есть вот что. 25 строчек, не считая мейкфайла. Запускаемый урл - первый и единственный аргумент командной строки.

border-radius ★
()
Ответ на: комментарий от CYB3R

А чтобы расшарить одно соединение между вкладками браузера есть какой-то костыль с использованием кук, ЕМНИП.

Устаревшая инфа, есть postMessage.

border-radius ★
()
Ответ на: комментарий от wwwsevolod

шаринг данных между вкладками реализуется с помощью событий которые генерирует localStorage (ie8+, в остальных случаях по таймеру)

Ехал кОстыль через кОстыль. postMessage/onmessage же (кстати, тоже осёл8+, а в браузерах можно ещё и нативными объектами JS обмениваться).

border-radius ★
()
Ответ на: комментарий от border-radius

postMessage это для общения меж фрэймами или когда одно окно (или вкладка) было открыто jsом из другого. а для общения между вкладками которые были созданы не зависимо друг от друга и находятся на одном домене используются события localStorage.

wwwsevolod ★
()
Ответ на: комментарий от Vit

Не поддерживает пока сжатие никто.

Sec-WebSocket-Extensions: deflate-frame не поддерживет ни один браузер, ни одна серверная часть или ни одна костылелиба?

border-radius ★
()
Ответ на: комментарий от wwwsevolod

А, они независимо созданы, но всё равно, что мешает засветить текущий id окна в localStorage и дальше гонять данные по postMessage?

border-radius ★
()
Ответ на: комментарий от border-radius

id окна? м? window это объект, никаких идентификаторов (полей по которому его можно было бы получить) нету, передать сам window (в смысле указатель на него) из одного окна в другое независимо созданное нельзя, т.к. в локалсторадж надо все сериализовывать, я посмотрю как ты цикличный объект в json превращать будешь, а даже если превратишь то я посмотрю как ты по нему обратишься из другого окна к тому чей виндоу был сериализован, так как это будет уже другой объект.

wwwsevolod ★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.