Push-уведомление для веб-приложения Java

В настоящее время я работаю над веб-приложением, которое использует Spring 3.1 и Hibernate 4.

Согласно требованию, я хочу реализовать push-уведомления, как это делает Facebook, на странице JSP. Если у вас есть предложения, пожалуйста, перечислите совместимые браузеры с их версиями.

7 ответов

Если вы можете обновить JDK до версии 7 или использовать ее, я предлагаю использовать Vert.x Vertx.io, используйте Sockjs на стороне клиента. Vert.x имеет полную реализацию сервера sockjs, я постараюсь предложить способ реализации этого, в остальном, пожалуйста, посмотрите Документы

Реализация сервера может быть такой

    Vertx vertx = Vertx.newVertx();
    EventBus eventBus = vertx.eventBus()
    HttpServer server = vertx.createHttpServer();
    JsonArray permitted = new JsonArray();
    permitted.add(new JsonObject());
    SockJSServer sockJSServer = new DefaultSockJSServer(vertx, server);
    sockJSServer.bridge(new JsonObject().putString("prefix", "/pusher"), permitted, permitted);
    server.listen(<some port>);

На стороне клиента зарегистрируйте обработчик как при загрузке документа

 function () {
if (!eb) {
  eb = new vertx.EventBus("http://<your_host>:<your_port>/pusher");

  eb.onopen = function() {
   console.log("connected")
  };

  eb.onclose = function() {
    console.log("Not connected");
    eb = null;
  };
}

}

Затем вы можете зарегистрировать обработчик на любой адрес - адрес здесь может быть любым, при условии, что это "AwesomeNotifications"

function subscribe(address) {
if (eb) {
  eb.registerHandler(address, function(msg, replyTo) {
  console.log("Reply recieved")
          });

}
}

После того, как все это настроено, теперь вы можете отправить любые данные с сервера на этот адрес, используя шину событий, которую мы создали ранее.

eventBus.publish("AwesomeNotifications", new JsonObject(<some hashmap to serialize>))

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

Вы можете использовать HTML5 сервер-отправлять вариант. Здесь вы можете получить более подробную информацию

Вариант отправки с сервера:

http://www.w3schools.com/html/html5_serversentevents.asp

Java сервелт для отправки на сервер:

Java сервлет и сервер отправляют события

Руководство:

http://peaktechie.blogspot.in/2012/04/small-tutorial-on-html5-server-sent.html

HTML5 поддерживаемые браузеры:

http://fmbip.com/litmus

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

Есть несколько способов сделать это:

  • ActiveMQ AJAX - публикуйте и подписывайтесь на события JMS прямо из javascript в браузере. Это довольно просто, с меньшим количеством наворотов, чем в других подходах, но из-за своей простоты может быть хорошей основой для начала, если вы a) уже используете activemq, b) как не слишком много уровней абстракции
  • Атмосфера - основанная на событиях структура, может автоматически определять лучший механизм связи, основанный на том, какой веб-сервер и какой посредник используются в настоящее время. Довольно приятный фреймворк, который поддерживает полный набор браузеров и веб-серверов, вплоть до IE6. И есть примеры использования Atmosphere с Spring MVC и Spring Integration.
  • Cometd - реализация протокола Bayeux (для автоматического согласования наилучшего типа соединения), основанная на молнии /hightide. Jetty был первым веб-сервером на Java, который поддерживал продолжения, теперь он является частью последней спецификации Servlet. Cometd берет Jetty и упаковывает его клиентскими библиотеками JS для автоматического определения лучшего механизма подключения к браузеру.
  • Vert.x - серверная платформа на основе событий, на которой вы можете построить. В последнее время, когда автор покинул VMware, возникли разногласия вокруг Vert.x, но VMware сохранил проект. Похоже, что версия 2 будет выпущена из Eclipse Foundation. Кажется очень перспективным, но довольно низким уровнем. Не то, что вы просто подключаете к существующему веб-приложению Java.
  • HTML5 EventSource - основанный на стандартах способ отправки событий в браузер. Нет механизма отправки событий обратно на сервер. Это интересно, но, учитывая, что вам нужно создать запасной вариант для IE6, IE7 и IE8, на данный момент это может быть не лучшим выбором.

Ulimately, я думаю, что для автора вопрос, интегрирующийся в проект spring-mvc, Атмосфера явно лучше всего подходит.

Редактировать: опечатки

Я использовал Атмосферу, чтобы сделать это. Он использует WebSockets, если они поддерживаются браузером, и в случае необходимости возвращается к опросу. У них также есть хороший плагин jQuery, чтобы сделать жизнь проще.

Я бы посоветовал вам пойти с длинным опросом ака Comet, Я использовал это, чтобы бросить случайные числа клиенту. Вы также можете обратиться к этому вопросу.

Мы долгое время использовали XMPP для поддержки push-уведомлений, но поддерживать сервер Ejabber (или любой другой) очень сложно.

Кроме того, на самом деле мы перешли на http://socket.io/, который имеет реализацию клиента и сервера, но вы должны управлять сервером nodejs и начать играть с js.

Я также проверил faye в одном проекте и отлично работает для среды Ruby.

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

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

Другие вопросы по тегам