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 поддерживаемые браузеры:
Я недавно изучал это. Подход, основанный на событиях, отлично подходит для структурирования одностраничных веб-приложений, но также может использоваться в многостраничных веб-приложениях.
Есть несколько способов сделать это:
- 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, и очень прост в разработке и управлении.