Как стать автором
Обновить

Комментарии 52

К сожалению, да, на сегодня поддержка WebSockets в браузерах только-только появляется.
Я сделал небольшой тест, на котором можно проверить поддерживается ли она в вашем браузере: websockets.ru/test.html
НЛО прилетело и опубликовало эту надпись здесь
Google Chrome 4.X — то есть dev-версия. В основную версию еще не перенесли.
НЛО прилетело и опубликовало эту надпись здесь
Стоит добавить, что для протокола Bayeux также существует поддержка в Dojo, jQuery. И фактически данный протокол не является составной частью CometD, но безусловно используется в нем.
Ну проверить наличие WebSocket проще простого window.WebSocket либо true, либо false :)
а есть ли поддержка STOMP на стороне клиента?
я имею в виду на стороне браузера
Есть реализация клиента в Orbited например. Но она ужасна.
НЛО прилетело и опубликовало эту надпись здесь
Это однозначно уловка для реализации двунаправленного обмена, что может пригодиться и для чата в том числе
Согласен.
при всем уважении к автору, который видимо разбирается в теме, статья нечитабельна. Имхо лучше не вываливать 150 технологий в один пост.
НЛО прилетело и опубликовало эту надпись здесь
К сожалению, вынужден с вами согласиться. Здесть проблема в том, что WebSockets это очень сильное расширение HTTP в первую очередь в плане идеи. Попытка воспринимать его привычно и приводит к таким недопониманиям. Поэтому нужно время и серия хороших статей, чтобы разработчики прочувствовали всю прелесть WebSockets.
С другой же стороны для новичков станет сразу понятно куда двигаться когда будет столько новых слов на одной странице имеюзих отношение к одной теме.
Большой плюс WebSockets в его простоте. Эта простота состоит из двух вещей:
— не нужно наворачивать велосипед на помед массу протоколов и хаков, чтобы добиться желаемого результата — я имею ввиду Comet и Bayuex.
— на клиенте все делается очень просто — вы получили сообщение — вы его обработали. В большинстве случаев нам даже не нужно усложнять себе жизнь и тащить сюда Stomp и Ampq.

Давайте подумаем, что такое «подписка» в терминах Stomp? По сути это выраженное желание пользователя получать информацию по какому-то каналу, на который он «подписывается». Как это будет звучать в терминах WebSockets? Просто открыв веб-сокет на определенный УРЛ! И этого достаточно для 90% приложений.
Дело в том, что с приходом веб-сокетов мы уже можем легко выйти за ограничения 2 коннектов на домен. Раньше мы были вынуждены мультиплексировать все данные по одному каналу (привет, Bayeux). Поэтому, нам надо в каждом сообщении иметь некий признак откуда оно пришло.
Но теперь в этом нет необходимости: мы просто открывем столько каналов сколько нам надо. Если мы открыли сокет на какой-то урл — то это и значит, что мы на него «подписались». Причем, обратите внимание6 информация из этого сокета будет сразу попадать в нужное место. Нам не надо определять из какого канала она пришла и направлять ее нужному классу/объекту/функции. Теперь это само собой будет правильно роутиться!
Здесь есть одно маленькое Но.
Серверу может поплохеть от количества коннектов, например память ядра для буферов соединений закончится, или как вариант закончится количество соединений разрешённое ядру, или CPU завершится на управлении коннектами.
В общем на сколько нибудь живых проектах это может стать существенной проблемой требующей внимания.

Как оптимизацию производительности серверной части, я рассматриваю использование одного канала с подписками.
Да, но мне кажется, что кол-во соединений будет такое же, только теперь они будут жить внутри сервера.
НЛО прилетело и опубликовало эту надпись здесь
По сути STOMP или AMQP не обязательны, но с одним из них можно реализовать event-driven architecture и вовлечь в нее клиент через Web Sockets, не заботясь ни о семантике потоков сообщений, ни о масштабируемости системы в целом. В случае полноценного стартапа, а не отдельно взятой задачи — Message Queue это то что надо. А если система еще и гетерогенная, то без «очереди» вообще не обойтись.
Кстати, а насколько сложно будет пользоваться веб сокетами не из браузера? Есть ли какие-то библиотеки для работы с ними?
По-моему никаких проблем — еще глядишь в curl какой-нибудь добавят. А уж в скриптовые языки и подавно, как только программисту более менее серьезного уровня это понадобится.
Здесь требования к клиенту tools.ietf.org/html/draft-hixie-thewebsocketprotocol-68#page-14
В указаном примере WebSocket.js (http://github.com/gimite/web-socket-js/blob/master/flash-src/WebSocket.as) представлена имплементация на Actionscript
Собственно единственная проблема, которая все портит…
А как быть с клиентами, которые выходят в инет через прокси, настроенный злобными админами, закрывшими соединения по всем портам кроме 80?
а разве тут не через 80 порт всё идет?
Сross-domain policy, к сожалению лезет через 843й порт.
Да. Это имхо недоработка в самом флеше.
Для таких ситуаций остается только вариант сервер-пуша через обычное не закрываемое сервером HTTP-соединение.
На другой хост?
С другой стороны, если вы коннектитесь к своему домену, то эта политика не должна вызываться и мешать.
Кто спец по флеш сокетам, поправьте меня плз.
Насколько я помню, в любом случае флешом запрашивается файл crossdomain.xml. Причём сначала на порт, на который идет дальнейший коннект. В принципе проблема решаемая, и у меня работало, когда я изобретал подобный велосипед.
Но а вот через фаервол, почему-то пробиться не получилось. В чём была проблема, вспомнить не могу.
Так что мне тоже, хочется услышать мнение флеш специалистов по этому поводу.
Можно ли его отдавать с самого порта, куда идет подключение?
Походу нет.
Или как-то указать в параметрах флешки или еще где-то, что файл может быть запрошен с другого порта?
С порта куда идет подключение, отдавать можно.
The crossdomain.xml file affects HTTP, HTTPS and FTP access to content on your webserver. (You can read more about it here.) This file has no effect on socket connections. You must set up a socket policy server to allow Flash-based socket access.
www.lightsphere.com/dev/articles/flash_socket_policy.html
То есть для сокетных коннектов единственный вариант — спец. сервер на 843 порту?
Так даже сам вебсокет сервер биндится на 10081 порт например.
И туда соединяются клиенты.
Правда если это станет общепринятым стандартом, я думаю 10081 будут открывать также как и 80.
поправьте, пожалуйста, опечатку Flesh-объекту -> Flash-объекту
Thx!
автор, в соседнем топике есть реализация чата на вебсокетах, ссылку неплохо бы в статью добавить
Done. MongoDB? Респект. Мы рассматривали такой вариант, но потом выбрали Hadoop как DFS и собираяемся использовать HBase.
Я это и добавил «UPDATED: Пример реализации чата на phpDaemon habrahabr.ru/blogs/php/79377/»
Я имел ввиду тот чат использует MongoDB
Какая-то каша у вас в голове.

> Long polling
Long polling отличается от HTTP Stream тем, что соединение открыто до тех пор, пока не придет первый ответ от сервера, после чего сам сервер соединение и закрывает. Клиент тут же открывает новое. HTTP Stream дежит соединение постоянно, разрывается оно только из-за проблем с сетью. Лонг поллинг нужен, например, что бы обходить всякие антивирусы, которые не отдают браузеру http запрос до тех пор, пока он не будет закрыт.

> script tags или scriptTagProxy
Две совершенно разных вещи, первая называется jsonp, нужна поддержка сервера на который идет запрос, а вторая проксирует запрос через специальный сервер, который уже и делает запрос.

> JSONRequest object ( www.json.org/JSONRequest.html ) — реализует двух-стороннее соединения, посредством двух одновременных запросов (один на передачу, другой на прием).

Ну а это просто бред.
НЛО прилетело и опубликовало эту надпись здесь
Вчера написал простенький чат на JS в стиле Google Waves (участники видят набор текста друг друга в реальном времени). Работает одинаково шустро в Chrome 4 (WebSocket) и FireFox 3.5/Opera 10 (эмуляция)
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории