クライアントからサーバーへのアプリケーション用のログインサーバーを作成しています。クライアントのサーバーからサーバーへの認証 - シングルスレッド
基本的に5台のサーバーがあり、これらのサーバーはすべて1台のログインサーバーに接続されています。
クライアントはこれらの5つのサーバーに接続できますが、ユーザー名とパスワードで認証する必要があります。ログインサーバーで認証を行う必要があります。ログインサーバーは、クライアントへの応答を返すべき実際のサーバーへの応答を返します。
だから、そのような:
クライアント - >サーバー - >ログイン・サーバー - >サーバー - >クライアント(応答コード)
さて、私はネッティーを使用していますが、それはNIOだ、それはスレッドではないですクライアントごとにNIOで認証するには、ログインサーバーからの応答が待つ必要があります。ログインに時間がかかり、他のクライアントが遅れることがあります。 。だから、私はそれをどのように機能させるかという考えを考えました。私のアイデアは別のスレッドでリクエストを実行し、onResponse(String key, int responseCode)
メソッドでイベントを持っていて、生成されたキーを持つマップにクライアントのチャンネルを入れて、レスポンスの所属を知ることができます。したがって、私たちが認証すると、鍵とユーザーのデータを送信します。
しかし、私はこれが悪い方法であり、これを行うためのより効率的な方法があると感じています。何か案は?
AFAIK nettyは、接続ごとにスレッドでNIOをブロックすることをサポートしています。 NIOの* default *動作はブロック動作であり、最近までSocketだけがオプションとして非ブロック動作をサポートしていました。 –
マルチサーバー環境では、マップを使用してチャネルを保持すると、そのマップが破損します。 – eg04lt3r
これを行うためのより良い方法を尋ねたので、ちょっとお勧めします.Javaを使用している場合は、Webソケット(html 5 + http(s))を調べるとよいでしょう。次に、クライアントモデルごとにスレッドを処理し、暗号化を使用した認証はアプリケーションに透過的で、エンドクライアントを配置しないNIOのすべての機能を利用できます。 – MuffinMan