如何删除气氛广播

Posted

技术标签:

【中文标题】如何删除气氛广播【英文标题】:How to remove atmosphere broadcaster 【发布时间】:2012-09-26 08:44:27 【问题描述】:

需要您的建议。 我的系统是关于客户端程序和网络服务的。客户端是某些事件的实例化者,它们向 Web 服务发送消息,对其进行处理并在完成后广播回来。我需要做的是关闭服务器端的 web-socket 连接,并清理资源。现在,当我关闭码头时,我可以看到所有广播公司仅在该步骤被删除。如果我向一个客户发送 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();

我认为,这种方法也可能是错误的,还有其他方法可以使事情正常进行。 有任何想法吗?谢谢!

【问题讨论】:

嗯,我想,我需要从客户端触发一些 onDestroy 回调,但我不明白该怎么做,有什么想法吗? 【参考方案1】:

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

您可以在 web.xml 中配置它,如 @jfarcand 所述或以编程方式如下所示

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

【讨论】:

【参考方案2】:

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

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

查看底部this page了解更多信息。

【讨论】:

现在试过了,没有结果。看起来还是一样的。我现在认为设计中有问题,我不应该为每个创建广播器的请求创建这么多资源。

以上是关于如何删除气氛广播的主要内容,如果未能解决你的问题,请参考以下文章

广播所有命令不自动删除广播 - Discord.js-Commando

从最近删除应用程序时后台服务停止

背景中的地理围栏

广播数据帧没有删除洗牌阶段(几行数据)[重复]

应用程序从后台删除后,服务内的广播接收器未收听

从收件箱中删除一条短信