野生のインターネットからの 500 ~ 1000 のアクティブな接続を処理する必要がある TCP サービスの前に配置する TCP プロキシを開発しています。
プロキシはサービスと同じマシンで実行されており、ほとんど透過的です。サービスはほとんどの場合、プロキシを認識しません。唯一の例外は、クライアントの実際のリモート IP アドレスの通知です。
これは、インバウンドのオープン TCP ソケットごとに、サーバー上にさらに 2 つのソケットが存在することを意味します。プロキシのペアの 2 番目と、プロキシの背後にある実際のサービスの 1 つです。
2 つのプロキシ ソケットの送信および受信ウィンドウ サイズは 1024 バイトに設定されています。
これに対するパフォーマンスへの影響は何ですか?この構成はどれくらい遅いですか? 名前付きパイプ (またはその他の IPC メカニズム) を使用するようにサービスを変更する必要がありますか? それとも、ほとんどの場合、localhost TCP ソケットが効率的な IPC になりますか?
2 つのアプリのマージはオプションではありません。現在、2 つのプロセス構成に固執しています。
EDIT:同じハードウェア上に2つの別々のプロセスを持つ理由は、100%経済的です。私たちはサーバーを 1 つしか持っておらず、それ以上のサーバーを取得する予定はありません (お金はありません)。
TCP サービスは、Visual Basic 6 のレガシ ソフトウェアであり、私たちの予想を超えて成長しました。プロキシは C++ です。VB6 コードを書き直して最新のプログラミング環境に移行するための時間、お金、人材がありません。
プロキシは、サービスの特定のパフォーマンスの問題、つまり時々発生するDDoS 攻撃を軽減するための試みです。
プロキシはオープン ソースです。プロジェクトのソース コードは次のとおりです。