質問

私は奇妙な質問文言について謝罪...ここで設計上の問題です。

私は消費者のPC上で実行しているクライアントアプリケーションの多くのインスタンスにサービスを提供する(C ++、FWIWを使用してLinux上)サーバーを開発しています。

私は、次の欲しいます:

1)すべてのクライアントが最初の「ゲートキーパー」サーバーアプリケーションに自分自身を識別します。この中で渡されるユーザー名とパスワードなどの資格情報を使用してログイン手順、考えてみましょう。「gserver」ゲートキーパーのプログラムを呼び出します。 (ゲートキーパー用)

各クライアントが検証されたら、

2)、それは、その後、同じサーバアドレスにバインドされた同じ物理サーバーボックス上で実行されている別のサーバーアプリケーションの複数のインスタンスの一つとの長期的な接続に置かれています。 (「作業」サーバーのため。)これらのインスタンス「wserver」のいずれかを呼び出します。

だから、何クライアントが見ることは、「ゲートキーパー」アプリケーションは、それが同じボックスで実行されているいくつかの「作業」サーバーのいずれかへのアクセスをパスワード付き与えることです。

ここでは、「本当の」挑戦です:私たちは、もっぱらインバウンドサーバー接続のための「周知の」ポート番号を使用したい(ポート80または443のように、と言う。)また、当社独自の「周知の」ポート。

私たちは、wserver(N)との長期的な接続フェーズのためのサーバー上の第2のポートにクライアントの話をしなければならないことを好むだろう。これに伴う問題は、当然のことながら、一度に1つのサーバー・プロセスが同じポートとサーバのアドレスにバインドすることができるということである。

このはgserverと、クライアントによって行われた接続はまた、長期的な接続の役割を記入しなければならないことを意味します。私はこれを実現するために見る唯一の方法は、gserverは、ログイン後、プロキシのように動作し、クライアントが論理的に結合していることを特定wserver(N)に自身とクライアント間のトラフィックをコピーする必要があります。

TCP / IP接続が最初のクライアントの間でなさ(n)とgserverは何とかそのまま同じサーバー上の別のアプリケーションに「輸送」することができ、その後、nはwserverの1(によって維持することができれば、

これは理想的です長期的な接続のための)インスタンス。

私は、Webサーバーは、サーバーの負荷を分散するために、このような何かを行うことを知っています。 「ロードバランシング」。ここでの主な違いは、「バランス」は、特定のwserver(n)のインスタンスに特定のユーザの割り当てがあることです。しかし、私はまた、負荷分散は、プロキシの一種であるという印象がある - (。それはアーキテクチャを複雑にしてだけでなく、オーバーヘッド単一障害点を追加しますので)私は避けるようにしようとしています。

この概念と設計の問題です。彼らは全体のアイデアを得るために絶対に必要不可欠である場合を除き、ソースコードの例を心配しないでください。我々はアプローチを突き止める場合、私はそれをコーディングすることができます。

ありがとうございます。

役に立ちましたか?

解決

あなたが探していることはファイルディスクリプタが通過しています。 UNP 15.7を参照してください。この施設の1つのよく知られているヘビーユーザーである後置するます。

他のヒント

私は長い時間前にこのようなアプリケーションを開発しました。複数のサーバが同じポート上で聞くことができないからです。何が必要、よく知られたポートで待機gserver持つことです。接続が確立されると、Unixソケットを介して他のサーバへの接続を渡します。接続は、他のサーバに渡されると、gserverは絵の外にあります。それは死ぬことができ、他のサーバーは、まだ接続にサービスを提供されます。

私は、これはあなたの設計に適用する場合は、「知らないが、通常の解決策は、(xinetdデーモンによってimplemmentedとして)にfork()と、その後のexec()プロセスです。たとえば、xinetdは実際にの異なるのプログラムによって提供されているなどのrlogin、rshを、TFTP、TELNET、などのサービスを果たすことができます。あなたのwserversは、プロセスがすでにシステムで実行されている場合、これはあなたに有用ではないだろう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top