2013-06-03 2 views
7

Можно ли отправлять серверы на все подключенные клиенты, не дожидаясь каких-либо действий? Позвольте мне объяснить это :-) Я читал docs/examples, и я не нашел ничего, что удовлетворило бы мои потребности: поток всегда один и тот же; клиент подключается (например: GET-вызов к API-интерфейсу Rest), соединение приостанавливается и до тех пор, пока не будет получен новый вызов API (например: POST-вызов), сервер просто ждет (или, по крайней мере, это то, что я понял). Мой вариант использования совсем другой: я хочу, чтобы сервер отправлял несколько «уведомлений», когда новые данные становятся доступными. Это будет мой случай использования (довольно упрощенный):Atmosphere Jersey - Серверные сообщения

  1. Клиент A подключается к серверу
  2. Подключение приостановлено, поскольку новые данные не будут доступны в данный момент
  3. Сервер получает уведомление новые данные доступны из внешний источник и вещает, чтобы это клиент а
  4. Перейти к шагу 2

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

Это мой стек:

  • Spring 3.2.0 RELEASE
  • Джерси 1,8
  • Атмосфера Джерси 1.0.13
  • Tomcat 7.0.40

Спасибо всем заранее!

UPDATE: После выполнения this я получаю это предупреждение, что я понятия не имею, как избавиться от:

2013-06-04 09:40:36,284 WARN [org.atmosphere.cpr.AtmosphereFramework] - Failed using comet support: org.atmosphere.container.Tomcat7AsyncSupportWithWebSocket, error: Tomcat failed to detect this is a Comet application because context.xml is missing or the Http11NioProtocol Connector is not enabled. 
If that's not the case, you can also remove META-INF/context.xml and WEB-INF/lib/atmosphere-compat-tomcat.jar Is the Nio or Apr Connector enabled? 
2013-06-04 09:40:36,285 WARN [org.atmosphere.cpr.AtmosphereFramework] - Using org.atmosphere.container.Tomcat7BIOSupportWithWebSocket 

Я следовал структура приложения прокомментировал here, так что это не должно быть проблемой. Я заметил, что при изменении транспорта на «websocket» вместо «long-polling» не отображаются ошибки. Сервер, наконец, отправляет данные жестко :)

ответ

0

Я следил за вашей ссылкой и немного изменил код.

Когда вы находитесь в шаге 3 «Сервер получает уведомление новых данных от внешнего источника и передают его на клиент А», вы должны написать следующую строку:

BroadcasterFactory.getDefault().lookup("/*").broadcast(response); 

Сначала я использовал TextMessage, полученный из моей очереди ActiveMQ, но получаю эту ошибку, поэтому я использовал класс Jackson как ответ объекта, и все сработало нормально.

СИЛЬНЫЕ: Тело сообщения для писателя класса org.apache.activemq.command.ActiveMQTextMessage Java и типа Java класса org.apache.activemq.command.ActiveMQTextMessage и MIME приложения типа носителя/JSON не найден jun 03, 2014 11:32:21 AM com.sun.jersey.spi.container.ContainerResponse написать жестки: писателям тела зарегистрировано сообщение, совместимые с типом MIME медиа являются: приложения/JSON (JSONJAXBElementProvider, JSONArrayProvider, JSONObjectProvider, JSONRootElementProvider, JSONListElementProvider, ...)