Vaadin 7 с веб-сокетами

У меня есть веб-приложение vaadin 7.1.4, которое отображает внутренние данные в различных структурах пользовательского интерфейса (таблица, дерево). Он имеет дело с большим количеством данных и, следовательно, является многопоточным. В настоящее время он работает на сервере Tomcat 6.

Я ищу способ реализовать веб-сокеты в своем приложении для выполнения какой-то очень конкретной задачи. Задача поясняется графически на следующем изображении:

Дизайн приложения Vaadin

Я ищу способ сделать это. Помогите пожалуйста решить следующие вопросы:

  1. Какую структуру следует использовать для создания сервера и клиента веб-сокета?
  2. Есть ли атмосферный java-клиент, который можно интегрировать с vaadin?
  3. Могу ли я использовать push-фреймворк Vaadin для решения этой проблемы?

Я сделал свою домашнюю работу и обнаружил, что фреймворк атмосферы (который также используется в Vaadin) является близким соперником. Но в примерах речь идет о клиентах JavaScript, а не о клиентах Java.


person eddyrokr    schedule 22.11.2013    source источник


Ответы (2)


Хотя я знаком с Vaadin 6 и 7, я не эксперт по WebSocket. Так что примите то, что я должен сказать, с долей скептицизма. Но вот…

(a) Ваш рисунок предполагает, что вы сосредоточены на стороне клиента (браузера). Возможно, вам придется изменить свое мышление. Суть Vaadin в том, что приложение действительно работает на сервере. Хотя мы концептуально думаем о нашем приложении, как о запущенном перед пользователем, мы знаем, что состояние и выполнение приложения на самом деле живут на сервере. Обычно мы не думаем о том, что буквально происходит внутри веб-браузера.

Именно это делает Vaadin таким особенным, а не одним из множества проектов еще одна веб-инфраструктура. Насколько я знаю, Ваадин почти уникален в этом отношении. Единственным другим набором веб-приложений с архитектурой выполнения на стороне сервера, такой как Vaadin, является (не Java) Xojo, Web Edition (ранее известная как Real Studio).

(b) Похоже, что то, что вы действительно хотите, называется «push», не касаясь деталей WebSocket. Объяснить…

Реагировать на пользователя

Обычно приложение Vaadin ожидает ответа на действие пользователя, например на ввод в поле или нажатие кнопки.

Например, когда пользователь нажимает кнопку в браузере, платформа Vaadin, установленная на стороне браузера, автоматически уведомляет приложение Vaadin, работающее на сервере, о действии этого пользователя. Затем серверное приложение запускает некоторый код, прикрепленный к кнопке. Этот чистый Java-код работает на сервере. Скажем, кнопка обновляет текст в поле. Когда ваш код на стороне сервера обновляет текстовое значение, серверная платформа Vaadin автоматически уведомляет платформу Vaadin на стороне браузера о новом значении. Новое значение автоматически появляется на экране для просмотра пользователем.

Обратите внимание, что мы, как программисты Vaadin, не интересуемся мельчайшими подробностями обмена данными, которые только что произошли в приведенном выше сценарии. Взаимодействие между браузером и сервером могло осуществляться с помощью HTTP-запросов-ответов, с помощью длинных опросов, или с помощью WebSocket, или черт знает чего еще. Нам все равно. То, что Vaadin 7.1 использует Atmosphere framework как часть своей реализации, не вызывает (обычно) никакого беспокойства. . В этом сила и особое отличие Ваадина.

Толкать

Иногда программист хотел бы обновить отображение, которое видит пользователь, не дожидаясь, пока пользователь выполнит какое-либо действие.

Возможно, данные, отображаемые в отчете для пользователя, меняются. Программист может захотеть, чтобы его приложение было настолько удобным, чтобы автоматически обновлять отчет, чтобы пользователю не приходилось нажимать кнопку Обновить. Такое поведение называется "отправлять", например отправлять обновления на экран пользователя. Публикация в блоге Vaadin, Дорожная карта на следующие 74 дня, объясняет, что основным нововведением Vaadin 7.1 является поддержка push-уведомлений.

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

Сосредоточьтесь на толчке

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

Прочитайте главу Server Push в Книга Ваадина. Это может быть все, что вам нужно для начала.


Как программист Vaadin, вам не нужно заботиться о WebSocket. Но как системный администратор вы должны быть в восторге от WebSocket. Эта технология обещает огромное увеличение скорости, отклика и надежности приложения. Предостережение: эта технология новая, поэтому мы еще не знаем, как она работает в реальном мире. Учитывая обещание и доступность Vaadin 7.1, вы можете включить контейнер Servlet с Поддержка веб-сокетов.

JSR-356 Java WebSocket в этом году (2013) определил стандартный интерфейс для Протокол WebSocket, определенный IETF rfc 6455.

Apache Tomcat 8 обновил реализацию этого JSR. Эта реализация была перенесена обратно в Tomcat 7.0.47, в результате чего поддержка Apache Собственный WebSocket API Tomcat в пользу новой реализации JSR-356. Tomcat 8 находится на стадии релиз-кандидата, поэтому вы можете попробовать его, хотя я не знаю, что может лучше всего работать с Vaadin 7.1.

Eclipse Jetty также поддерживает WebSocket. Jetty близко сравнивается с Tomcat, оба работают очень хорошо в целом (хотя я не могу говорить об их функциях WebSocket).

Другие контейнеры сервлетов могут предлагать поддержку WebSocket.

ОБНОВЛЕНИЕ: обратите внимание на ответ от jfarcand. Я только что заметил, что он (Жан-Франсуа Аркан) является создателем фреймворка Atmosphere!

ОБНОВЛЕНИЕ 2015-10: Контейнеры сервлетов, такие как Apache Tomcat и Eclipse Jetty итерирует множество выпусков для исправлений и улучшений для WebSocket. Обязательно обновитесь до более поздних версий. То же самое для Vaadin, многие итерации включают исправления для WebSocket, в настоящее время 7.5.8.

person Basil Bourque    schedule 22.11.2013
comment
Большое спасибо за очень исчерпывающий ответ! - person eddyrokr; 23.11.2013

отвечая на ваши вопросы:

Какую структуру следует использовать для создания сервера и клиента веб-сокета?

Я рекомендую вам использовать Vaadin 7.1.x, который использует Atmosphere под капотом. Вы также можете использовать Atmosphere напрямую, но я должен сказать, что интеграция с Vaadin довольно хороша. Атмосфера работает везде, где поддерживаются веб-сокеты: Vert.x, Play! Сервлет и Нетти.

Есть ли атмосферный java-клиент, который можно интегрировать с vaadin?

Да, см. wAsync.

Могу ли я использовать push-фреймворк Vaadin для решения этой проблемы?

Да

person jfarcand    schedule 22.11.2013