奇妙な質問の文言をお詫びします...これがデザインの問題です:
コンシューマーPCで実行されているクライアントアプリケーションの多くのインスタンスにサービスを提供するサーバー(LinuxではC ++、FWIWを使用)を開発しています。
私は以下が欲しい:
1)すべてのクライアントは、最初に「ゲートキーパー」サーバーアプリケーションに対して自分自身を識別します。これを、ユーザー名やパスワードなどの資格情報が渡されるログイン手順と考えてください。ゲートキーパープログラム「gserver」を呼び出します。(ゲートキーパー用)
2)各クライアントが検証されると、同じサーバーアドレスにバインドされた同じ物理サーバーボックスで実行されている異なるサーバーアプリケーションのいくつかのインスタンスの1つとの長期接続に配置されます。これらのインスタンスのいずれかを「wserver」(「動作中の」サーバーの場合)と呼びます。
したがって、クライアントに表示されるのは、「ゲートキーパー」アプリケーションが、同じボックスで実行されている複数の「動作中」サーバーの1つへのパスワード付きアクセスを許可することです。
これが「実際の」課題です。インバウンドサーバー接続には「既知の」ポート番号(たとえば、ポート80や443など)を排他的に使用するか、独自の「既知の」ポートを使用します。
wserver(n)との長期的な接続フェーズでは、クライアントがサーバー上の2番目のポートと通信する必要はありません。もちろん、これに伴う問題は、一度に1つのサーバープロセスのみが同じポートとサーバーアドレスにバインドできることです。
これは、クライアントがgserverを使用して行う接続も、長期接続の役割を果たす必要があることを意味します。これを達成するために私が見る唯一の方法は、ログイン後、gserverがプロキシのように動作し、gserverとクライアント間のトラフィックをクライアントが論理的にバインドされている特定のwserver(n)にコピーする必要があることです。
client(n)とgserverの間で最初に確立されたTCP / IP接続を、同じサーバー上の別のアプリケーションにそのまま「転送」し、その後、wserver(n)インスタンスの1つによって維持できると理想的です。長期的なつながり。
Webサーバーは、サーバーの負荷を分散するためにこのようなことを行うことを知っています。「負荷分散」。ここでの主な違いは、「バランシング」は特定のユーザーを特定のwserver(n)インスタンスに割り当てることです。しかし、負荷分散は一種のプロキシであるという印象もあります。これは避けようとしています(アーキテクチャが複雑になり、オーバーヘッドと単一障害点が追加されるため)。
これは概念と設計の質問です。ソースコードの例について心配する必要はありません。ただし、アイデアを広めるために絶対に必要な場合を除きます。アプローチを特定すれば、それをコード化できます。
ありがとう!