2012-09-26 44 views
3

需要您的建议,请。 我的系统是关于客户端程序和Web服务的。客户端是一些事件的实例化器,它们将消息发送到Web服务,它被处理,并在完成时被广播回来。我需要做的是关闭服务器端的网络套接字连接,并清理资源。现在,当我关闭码头时,我可以看到所有的广播公司只在该步骤被移除。如果我向一个客户端发送10条消息,则会有10个广播服务器挂在Web服务上。在广播公司尝试.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(); 
} 

我认为,这种做法可能也是错误的,并没有其他的方式来使事情工作。 任何想法?谢谢!

+0

嗯,我想,我需要触发来自客户端一些的onDestroy回调,但我不明白如何做到这一点,有什么想法? – user1255246

回答

3

萨吕,

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

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

this page底部以获得更多信息。

+0

现在试过了,没有结果。仍然看起来一样。我'现在认为设计中出现了问题,我不应该为创建广播者的每个请求创建太多资源。 – user1255246

3

您还可以使用策略EMPTY_DESTROY,如果没有与此广播公司关联的AtmosphereResource,它将删除广播公司。

您可以在web.xml配置它通过@jfarcand或提及的程序如下图所示

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