我在使用Atmosphere 0.7.2時遇到了限制我的廣播範圍的問題。大氣請求範圍廣播
我有一個Jersey POJO,有一個open
方法,我想將廣播者傳遞給一個非webservice類。這是爲了讓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
。
感謝