【发布时间】:2011-07-26 15:27:41
【问题描述】:
我在使用 Atmosphere 0.7.2 限制我的广播范围时遇到问题。
我有一个 Jersey POJO,带有 open 方法,我想将广播器传递给非 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)。在每种情况下,客户端都没有收到任何广播消息。我确实曾经收到一条消息,广播器已被破坏,无法使用,但我不记得我是怎么做到的!
我看到了similar question,但我不确定如何将其翻译成我的 POJO,因为我没有扩展 AtmosphereHandler。
谢谢
【问题讨论】:
标签: atmosphere