3

あなたの提案が必要です、お願いします。私のシステムはクライアントプログラムとWebサービスに関するものです。クライアントはいくつかのイベントのインスタンス化者であり、メッセージをWebサービスに送信し、処理されてからブロードキャストされます。私がする必要があるのは、サーバー側のWeb-Socket接続を閉じ、リソースをクリーンアップすることです。現在、突堤をシャットダウンすると、そのステップでのみすべての放送局が削除されていることがわかります。1つのクライアントで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();
}

このアプローチも間違っている可能性があり、物事を機能させる他の方法があると思います。何か案は?ありがとう!

4

2 に答える 2

3

ポリシー EMPTY_DESTROY を使用することもできます。これは、このブロードキャスターに関連付けられた AtmosphereResource がない場合にブロードキャスターを削除します。

@jfarcand で言及されているように web.xml で、または以下に示すようにプログラムで構成できます。

Broadcaster b = broadcasterFactory.get();
b.setBroadcasterLifeCyclePolicy(BroadcasterLifeCyclePolicy.EMPTY_DESTROY);
于 2015-07-13T09:42:07.853 に答える
3

次の web/application.xml 要素を追加するだけです

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

詳細については、このページの下部を参照してください。

于 2012-09-26T12:30:39.013 に答える