2016-05-09 8 views
8

クライアントをサーバーから切断したいと考えています。複数のユーザーセッションをシャットダウンするためのjava推奨の方法

for (Session session : sessions) { 
     closeSession(session); 
     while(!verifyClosed(session)){ 
      closeSession(session); 
      retries++; 
      if(retries==10){ 
       retries = 0; 
       break; 
      } 
     }; 
    } 

今、私がしたい:

は、だから我々はリットル

「自分自身を閉じて」のようないくつかのコマンドは、だから、一般的に、私はこのような何かを基本的に含まれ、セッションにいくつかのメッセージを送りましたいくつかのsigterm killメソッドを実行する前に、各セッションを閉じる秒数を与えます(5としましょう)。

ので好ましい方法であるもの:

  1. 各セッション終了手続きのための5秒遅れの最大値でループを行います。

    OR

  2. スタートは、各セッションのためのセッションが同時に閉鎖される必要がありますので、この手順を実行したスレッド。

    for (Session session : sessions) { 
        startClosingThread(session); 
    } 
    

更新:

私はいくつかのユーザーがfalsly単語「セッション」に多くのにハングアップ、問題は全くSessionHandlingではないことに気づきます。もし私が閉鎖メッセージを送信したり、ソケットを外しても問題はありません。これは問題ではありません。

セッションをUserThreadに置き換えることができます。

私はいくつかのアドバイスが必要な問題は次のとおりです: "UserThread"を閉じるには時間がかかるので、同時にすべてのスレッドを処理するスレッド。

+4

すべてのセッションを収集またはキューに追加して定期的にトラバースし、各セッションに閉じるコマンドを送信することができます。いくつかのセッションがクローズに成功しなかった場合、それをコレクションに戻します。コレクションが空になるか、リトライ回数が超過するまで実行してください。 –

+1

'' sigterm 'kill methods 'は何を殺すの?このシナリオでは、「ユーザーセッション」とは何ですか?ソケットを閉じるだけで何が問題になりますか? – EJP

+0

閉じるコマンドをブロッキングまたは非ブロッキング操作で送信していますか?セッションにどのような接続がありますか?sigterm killメソッドを実行できますか? – Alexander

答えて

1

すべてのセッションでセッションのクローズ要求を送信し、5秒待ってからすべてのセッションを確認します。そうすれば、セッションが終了するのは、新しいスレッドを一斉に開始することなく、並行して行うことができます。

+0

はい、それはこのようです – Gobliins

関連する問題