2015-02-07 2 views
0

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

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

+0

websockets - отличное место для начала. вы сказали веб-приложение. как в продукте. или просто веб-страницу.Если это продукт, обратитесь к веб-сокетам, так как вам не нужно беспокоиться о проблемах с совместимостью браузера или чем-либо еще. –

+0

Реализация веб-сокетов на веб-сервере - это то, что нужно учитывать. Если вы не используете такую ​​библиотеку, как Atmosphere, код, который вы пишете, скорее всего, будет соответствовать спецификациям веб-сокетов определенного веб-сервера. – Nasir

+0

Да, я бы сказал, что веб-узлы. По звуку ваших требований, забудьте SOAP, REST, долго тянущие и другие ночные хаки. –

ответ

1

Websocket - это самый быстрый транспорт, но он не поддерживается хорошо (по старым версиям Internet Explorer).

Запросы AJAX выполняются не так быстро (потому что браузер потенциально установит новое HTTP-соединение, а HTTP-заголовки также наведут накладные расходы), но гораздо лучше. И с правильными настройками keep-alive HTTP-соединение должно быть повторно использовано.

Вы можете использовать некоторую общую реализацию, такую ​​как sock.js (хорошо поддерживаемая Spring framework). Он автоматически выбирает лучший доступный транспорт. Но он вводит дополнительный уровень сложности.

1

Есть куча вещей, которые следует учитывать.

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

Веб-сокеты специально разработаны для этого. Он имеет гораздо меньше накладных расходов, чем поток сообщений на основе протокола TCP или UDP.

Вы ориентируетесь на современные браузеры или также нуждаетесь в поддержке старых браузеров?

Существует разнообразная поддержка протоколов, в разных версиях, реализации могут иметь некоторые оговорки и т. Д.

Или используется примитивный WebSockets?

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

Например, если вы развертываете на Jetty (и используете его API изначально), вам необходимо реализовать WebSocketCreator. Если вы используете Grizzly изначально, вам необходимо реализовать WebSocketListener и так далее.

Atmosphere пытается исправить это, предоставив единый интерфейс, который работает на разных серверах. Опять же, как только вы выберете такую ​​библиотеку, вам нужно будет внести изменения, если вы захотите использовать другую библиотеку в будущем.

Или вы можете использовать сервис, такой как Pusher или любой из его конкурентов.

Если вы используете Google, вы сможете найти множество примеров.

Надеюсь, это поможет.

+0

Мне нужен один пример, который говорит, что веб-дескрипторы не переносимы. =) Добавление зависимостей от сторонних библиотек требует реальных причин , Вспомните, что сказал Дональд Кнут: «преждевременная оптимизация - это корень всего зла». Я считаю «преждевременные проблемы» одним и тем же. Я знаю, что у некоторых браузеров была проблема с пингом и понгами в начале, но я думаю, что это разрешено сейчас. Я знаю, что канал websocket, используемый в моем собственном чат-приложении (http://www.martinandersson.com), отлично работает во всех браузерах. –

+0

Я предполагаю, что я говорил о реализации сервера. Я сделал редактирование, и, надеюсь, мои намерения более ясны. Предположим, вы решили развернуть на Grizzly. У Grizzly есть свой собственный интерфейс для включения WebSockes. Аналогично, для Jetty и других веб-серверов есть отдельные. Если он хочет поддержать всех из них, ему придется реализовать весь этот интерфейс. – Nasir

+0

Кроме того, веб-сокеты не поддерживаются во всех браузерах + версии. Посмотрите http://caniuse.com/#feat=websockets. Версия, не зеленая или не зеленая, не поддерживает WebSockets. Вы должны использовать Long Polling или другие методы. Если вы подготовите образец и протестируете его в современных современных браузерах, все они будут работать. – Nasir

Смежные вопросы