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

ользую Atmosphere runtime 0.6 Snapshot. Tomcat 7 правильно регистрирует, что я использую разъем Http11 Nio, и нет никаких предупреждений, что BlockingIO будет использоваться.

Я пытаюсь отправлять сообщения на три вида каналов.

Global Broadcaster - трансляция на все приостановленные ресурсы. (Все)Трансляция на определенный ресурс (скажем, Партнер)Трансляция на текущий ресурс (Self)

Когда происходит вход в систему, что все я должен хранить в сеансе, чтобы добиться такого рода трансляции?

Некоторые детали моего кода следующие:

Мой обработчик реализует AtmosphereHandler

В конструкторе я создаю экземпляр globalBroadcaster следующим образом:

globalBroadcaster = new DefaultBroadcaster();

При входе

resource.getAtmosphereConfig().getServletContext().setAttribute(name, selfBroadcaster); где name - это имя пользователя из параметра запроса, а selfBroadcaster - это новый экземпляр DefaultBroadcaster.

Вот код для sendMessageToPartner,

private synchronized void sendMessageToPartner(Broadcaster selfBroadcaster, AtmosphereResource<HttpServletRequest, HttpServletResponse> resource,String name, String message) {<br>// this gives the partner's name<br>String partner= (String) resource.getAtmosphereConfig().getServletContext().getAttribute(name + PARTNER_NAME_TOKEN);<br>// get partner's broadcaster<br>Broadcaster outsiderBroadcaster = (Broadcaster) resource<br>.getAtmosphereConfig().getServletContext()<br>.getAttribute(partner);<br>if (outsiderBroadcaster == null) {<br>sendMessage(selfBroadcaster, "Invalid user " + partner);<br>return;<br>}<br>// broadcast to partner<br>outsiderBroadcaster.broadcast(" **" + message);

Я надеюсь, что дал всю необходимую информацию. Я могу предоставить больше информации, если требуется.

Проблема в том, что глобальное сообщение отправлено. При отправке сообщения партнеру, иногда оно блокируется, сообщение вообще не принимается клиентом. Это происходит последовательно после 3-4 сообщений.

Есть ли какая-то проблема с потоками? Что я делаю неправильно?

Я надеюсь, что кто-нибудь поможет мне с этим.

Ответы на вопрос(1)

Ваш ответ на вопрос