我无法使用 Atmosphere 0.7.2 限制我的广播范围。
我有一个带有open
方法的 Jersey POJO,我想将广播器传递给一个非 web 服务类。这是为了允许分离 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
.
谢谢