2017-11-13 9 views
0

クライアントとサーバー間の再接続は、クライアントが初期メッセージを送信し、サーバーから応答を受け取る初期化を使用して行われます。この初期化は、接続が確立される前に何度も繰り返すことができます。クライアントとサーバーはキープアライブ接続で通信します。 1つのクライアントと多くのサーバーがあります。サーバーとクライアント間の再接続ロジックを設計するにはどうすればいいですか?

  1. クライアントは
  2. クライアントは常にしようと
  3. クライアントは、サーバーのいずれかが好ましい選択肢に接続できるサーバーを含むサーバー・リストを、持っている任意の時点で、せいぜい1台のサーバーに接続することができます最初に接続先を選択することができない場合、他のサーバーに接続しようとします。
  4. 起動時に、最初に接続する前に、クライアントのサーバーリストに1人のメンバーが含まれます。
  5. クライアントは最初に接続するか再接続すると、最初のメッセージがサーバーに送信されます - > 1の3応答> CHANGE_SERVER、OK、ERROR
  6. CHANGE_SERVERとOK応答はまた、既存のものが
  7. OK応答代わる新しいサーバー・リストを、含まれています - - >それは、クライアントが正しいサーバに接続されており、それはとどまることSESが可能です接続
  8. CHANGE_SERVERが - >クライアントが正常に特定のサーバーに接続されているが、異なる1つに接続するように言わ
  9. ERRORを再接続しようとしている - >指定されたサーバーに接続できませんでした、別の1
  10. をしようとしますクライアントが接続され、今メッセージを送信できない場合は、再接続を試みます。
  11. クライアントが既に接続されている(OKを受け取っている)場合、再接続を試みません。

私はこの問題の解決策を設計するのに誰かが助けてくれることを願っていました。私が探しているのは、高水準モデルです。クラスとメソッド(コードなし)などです。実装でグローバル変数を避けるために役立ついくつかのデザイン。実際の実装にはJavaを使用します。私の短い研究は、ActorモデルとAkkaフレームワークの方向性を指摘しています。

+0

ここにはたくさんのクラスはありませんが、確かにフレームワークではありません。まず何かを書いてみて、それがどのように見えるか見てみましょう。 – rghome

答えて

0

あなたは、接続ロジックを処理するために必要な状態マシンのかなり良い考えがあるようです。したがって、私は、有限状態機械の助手akke:FSMを使用することをお勧めします。そうすれば、あなたが簡単に説明したことを実装することができます。

アクターとメッセージの受け渡しを使用して接続が管理されるため、ネットワークI/Oを処理するためにAkkaを使用する予定がある場合、これは特にうまく統合されます。https://doc.akka.io/docs/akka/current/java/io.html

+0

ありがとう、これは有望な道のりと思われる、それを調査します。 –

関連する問題