Статьи

WebSockets с Джонни Вей в Денвере JUG

Этим вечером я посетил Denver JUG, чтобы услышать, как Джонни Вей говорит о WebSockets . В этом месяце место переехало, и, несмотря на то, что у меня была хорошая поездка на велосипеде на встречу, я опоздал примерно на 20 минут. Разговор Джонни продолжался около 40 минут, поэтому я пропустил первый тайм.

Когда я приехал, он говорил об обходных путях для реализации push-приложений в браузерах. У него был слайд, в котором говорилось о Comet и iframes как об общей реализации, а другой основной опцией был XMLSocket в ActionScript . Самые большие проблемы с XMLSocket (по словам Джонни):

  • Не доступно на многих современных мобильных платформах.
  • Flash и управление / обнаружение версий плагинов могут добавить нежелательную сложность.
  • Многие считают Flash-решения устаревшими.

Самой большой проблемой при реализации push на клиенте является управление всем этим, особенно если вам нужно поддерживать старые браузеры. Socket.IO — одно из возможных решений. Он едет на фалды node.js . Особенности Socket.IO включают в себя:

  • Абстрагирует методы сокетов в единый API.
  • Открытый исходный код (MIT) с активным сообществом.
  • Несколько серверных реализаций (включая Java) с «эталонной» реализацией, разработанной в node.js.

Клиентский API выглядит следующим образом:

var socket = new io.Socket(); 
socket.on('connect', function(){
socket.send('hi!');
})
socket.on('message', function(data){
alert(data);
})
socket.on('disconnect', function(){})

jWebSocket — это еще одно решение, и именно здесь многие разработки Java WebSocket заканчиваются прямо сейчас. Основные моменты о проекте включают в себя:

  • Открытый код (LGPL) с относительно активным сообществом.
  • Servlet-подобный API.
  • Более «предприимчивый», чем Socket.IO.

Другие варианты включают CometD , которая является реализацией Comet, управляемой Dojo, которая использует спецификацию Bayeux . Jetty и GlassFish поддерживают WebSockets в различных формах функциональности и стабильности. Наконец, есть Pusher (реализация push в SaaS с RESTful API) и Atmosphere (независимая от контейнера среда).

Как вы масштабируете веб-сокеты? Так же, как вы делаете масштаб веб-приложения:

 

  • Идти без гражданства
  • Используйте короткий цикл запроса / ответа
  • Используйте наименьшую возможную нагрузку
  • Кеш как можно больше

Масштабирование задач с помощью веб-сокетов:

  • Соединения имеют внутреннее состояние (они никогда не закрываются!)
  • Коммуникационный канал к вашему серверу приложений
  • Какой-то самоанализ на стороне LB (JMX)

В сообществе WebSockets также существуют противоречия, в основном связанные с использованием Upgrade vs. CONNECT с HTTP. Эксперимент (IETF) обнаружил, что часть обновления протокола HTTP часто неправильно использовалась прокси-серверами и другим сетевым оборудованием. Похоже, это привело к тому, что Google Chrome отказался от использования Upgrade в пользу CONNECT . CONNECT, используемый таким образом, рассматривается многими как злоупотребление Интернетом.

Джонни предоставил и другие полезные ссылки: « Что я могу использовать… чтобы найти встроенную поддержку в разных браузерах?». Например, вы можете увидеть, какие браузеры поддерживают веб-сокеты . Он также отметил, что websocket.org предоставляет хорошее введение в WebSockets.

Я рад, что присутствовал на выступлении Джонни. Я немного опасался использования WebSockets в своих приложениях из-за старых браузеров. Теперь, когда я знаю о фреймворках (таких как Socket.IO), которые решают эту проблему, я готов попробовать ее, когда возникнет такая необходимость.

От http://raibledesigns.com/rd/entry/websockets_with_johnny_wey_at