2015-04-21 5 views
1

Я пытаюсь разработать социальную сеть, которая реализует шаблон публикации издателя (вроде Twitter): пользователи могут следить за людьми, поэтому их уведомляют, когда отправляется новая публикация их последователей.Интеграция службы REST Rax с помощью WebSockets

Все, что я имею сейчас, - это работающая служба REST, реализованная с помощью JaxRS, работающая над Tomcat 7, предлагающая услуги для входа в систему, регистрации, получения профилей и отправки сообщений. Отображение Servlet осуществляется через web.xml

My JaxRS app config

RestServices

Web.xml

Но вес приложения происходит от PubSub части. И здесь все становится грязным.

Прежде чем говорить о технологии и реализации, жизненный цикл этого PubSub:

Позволять А и Б некоторых пользователей приложения и А следует (подписан на) B.

  1. переходит на его «временную шкалу», поэтому регистрирует конечную точку WebSocket на сервере, откуда он получит уведомления, когда любой из людей, которых он подозревал, что-либо публикует. (A, сам, был бы темой?)
  2. B публикует новое сообщение, оно отправляется службе JaxRS через HTTP POST/post.
  3. Сервер хранит публикацию в базе данных, а затем отправляет ее подписчикам прослушивания через WebSocket. Поскольку А жив и слушает, публикация отправляется через его WebSocket/тему.
  4. A получает уведомление о новой публикации.

Я работал с Java-встроенными Web-сокетами (javax.websocket), Spring websockets (через STOMP) и JavaScript как встроенный, так и SockJS. Я знаю, что JaxRS имеет что-то, называемое событиями, отправленными сервером, которые действуют как веб-узлы, но я абсолютно потерял, как их инициализировать и работать с ними.

Мои сомнения:

1) Могу ли я «смешать» Spring WebSockets например с моим JaxRS сервером и как бы это быть инициализированы?

2) С помощью JaxRS и SSE я могу динамически создавать оконечные точки WS на сервере?

Заранее спасибо

+0

Не совсем полный ответ, но вам может потребоваться верхняя проверка Атмосфера, которая поддерживает 1) и 2) https://github.com/Atmosphere/atmosphere. Просто взгляните на http://goo.gl/s7OwGc – jfarcand

+0

oh nice, собираюсь попробовать, опубликует ответ, если я получу, чтобы решить его, спасибо! – RecuencoJones

ответ

4

Наконец сделал обходной путь с помощью сервера Sent Events Джерси, хотя не поддерживается IE, но работает для того, что мне нужно было

Вот код для SSEProvider и SSEDispatcher

Gradle dependency

и передний конец connection и handlers

Также некоторые документы на HTML5 SSE

+1

Стоит упомянуть, что IE поддерживается с использованием полизаполнения, например. [здесь] (https://github.com/Yaffle/EventSource) или [здесь] (https://github.com/remy/polyfills/blob/master/EventSource.js) –

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