如何删除大气广播员

时间:2012-09-26 08:44:28

标签: java websocket atmosphere

请提出你的建议。 我的系统是关于客户端程序和Web服务。客户端是某些事件的实例化器,它们向Web服务发送消息,处理完成后再进行广播。我需要做的是关闭服务器端的Web套接字连接和清理资源。现在,当我关闭码头时,我可以看到所有广播公司仅在该步骤被删除。如果我用一个客户端发送10条消息,我会在网络服务上挂起10个广播公司。在广播公司尝试过.destroy(),但是并没有真正看到它工作,也尝试在客户端破坏连接,但也没有成功。

我的订阅是:

@GET
@Suspend
public SuspendResponse<String> subscribe(){
....
Broadcaster broadcaster = BroadcasterFactory.getDefault().get("/"+path+"/"+id);

            ...somecallback here....
                        @Override
                        public void onMessage(String message) {
                             broadcaster.broadcast(message);
                             //here I want to destroy broadcaster and cleanup resources.
                        }

    return new SuspendResponse.SuspendResponseBuilder<String>()
        .broadcaster(broadcaster)
        .outputComments(true)
        .build();
}

我认为,这种方法也可能是错误的,还有其他方法可以使事情发挥作用。 有任何想法吗?感谢的!

2 个答案:

答案 0 :(得分:3)

萨吕,

只需添加以下web / application.xml元素

即可
  <init-param>
      <param-name>org.atmosphere.cpr.broadcasterLifeCyclePolicy</param-name>
      <param-value>IDLE_DESTROY</param-value>
  </init-param>

有关详细信息,请参阅this page的底部。

答案 1 :(得分:3)

您还可以使用政策EMPTY_DESTROY,如果没有与此广播公司相关联的AtmosphereResource,则会删除广播公司。

您可以在@jfarcand中提到的web.xml中进行配置,也可以通过编程方式进行配置,如下所示

Broadcaster b = broadcasterFactory.get();
b.setBroadcasterLifeCyclePolicy(BroadcasterLifeCyclePolicy.EMPTY_DESTROY);