Push-уведомление для веб-приложения Java - программирование
Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Если вы можете обновить или использовать 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>))

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

Ответ 2

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

Отправка по серверу:

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

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

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

Учебник:

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

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

http://fmbip.com/litmus

Ответ 3

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

Существует несколько способов сделать это:

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

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

Изменить: опечатки

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

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