У меня проблемы с ограничением объема моих трансляций с использованием Atmosphere 0.7.2.
У меня есть джерси POJO с методом open
, и я хочу передать вещателя не-сервисный класс.Это позволяет разделить уровни WAR и EJB.
@Path("/")
public class MyJerseyPojo {
@Context
private Broadcaster broadcaster;
@GET
@Suspend
public String open() {
Manager.register(/* Session ID */, new NonWebservice(this.broadcaster));
return "";
}
}
public class NonWebService implements Sender {
private Broadcaster broadcaster;
public NonWebService(Broadcaster b) {
this.broadcaster = b;
}
@Override
public void send(String thing) {
this.broadcaster.broadcast(thing);
}
}
Идея состоит в том, что события обновления будут вызывать send
, и это уведомит клиента о приостановленном ответе.Каждый клиент должен быть связан с отдельным вещателем.
Проблема в том, что это решение использует один и тот же вещатель для всех клиентов.Я попытался добавить @Suspend(scope = Suspend.SCOPE.REQUEST)
к методу open
, но это не приводит к получению широковещательных сообщений.
Я также попробовал следующее в методе open
:
@GET
@Suspend
public String open() {
Broadcaster b = BroadcasterFactory.getDefault().get(JerseyBroadcaster.class, UUID.randomUUID());
b.setScope(Broadcaster.SCOPE.REQUEST);
Manager.register(/* Session ID */, new NonWebservice(b));
}
Это не сработало, используя @Suspend
или @Suspend(scope = Suspend.SCOPE.REQUEST)
.В каждом случае клиент не получал никаких широковещательных сообщений.Однажды я получил сообщение, что вещатель был уничтожен и не может быть использован, но я не могу вспомнить, как я это сделал!
Я видел подобный вопрос , но яЯ не уверен, как перевести его на мой POJO, так как я не расширяю AtmosphereHandler
.
Спасибо