2012-09-26 70 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);