1

ちょっと私は Twisted でアプリを書いています。現状では、JSON 経由でクライアントと通信する 2 つの異なるポートにバインドされた 4 つのサーバーがあります。これらの 4 つのサーバーを同じポートにバインドし、相互作用を同じままにする方法はありますか?

たとえば、クライアントがダイレクト ソケット経由で送信される 2 つの異なるフィードをサブスクライブするとします。

今、私はちょうど好きです

server1.read_string()
server2.read_string()

そして、それぞれのフィードから正しい JSON 文字列を読み取ります。このタイプの機能を維持しながら、同じポートでサーバーに接続する方法はありますか?

すべてのサーバー機能を 1 つの大規模なサーバーに投入して、データをヘッダー プレフィックスで分割したくはありません。

みたいなことはしたくない

s = server.read_string()
header = s.split(//some delimiter)[0]
if (header == "SERVER1")
{
   // Blahh
}
4

2 に答える 2

3

多くのクライアントが HTTP 経由でサーバーとやり取りしているようです。標準的な解決策は、クライアントとサーバーの間にリバース プロキシを配置することです。このプロキシは、URL に応じて適切なサーバーに接続を転送します。リバース プロキシは、負荷を軽減するために、既存のサーバーのいずれかまたは独自のサーバーで実行できます。

データがキャッシュ可能な場合、リバース プロキシは結果もキャッシュできます。

利用可能なリバース プロキシは多数あり、ワークロードの種類に基づいて 1 つを選択する必要があります。高度に構成可能にする必要がありますか? データは公開されていますか、それともログインに基づいていますか? 各接続はどのくらい持続しますか / 一度に開いたままにしたい接続の数は?

SquidVarnishHAProxyは優れたリバース プロキシであり、Apache でさえこれを行うことができます。

クライアントとの継続的な接続が多数あり、軌道サーバーをdjangoサーバーと同じURLパスに配置したいので、私のプロジェクトであるGridspyにHAProxyを使用する予定です。ポート 80 で多数の接続を 1 つのサーバーから多数のサーバーに転送する方法の詳細については、このチュートリアルを参照してください。このチュートリアルは Comet に焦点を当てていますが、問題はそれよりもさらに単純です。

ブラウザからサーバーへの継続的な tcp/ip 接続を検討している場合は、Orbitedを真剣に検討してください。orbited および morbidQ を介したグラフに関するこのチュートリアルを参照してください。Orbited は、通常の HTTP トラフィックのように見えるため、ほとんどのカスタム ソリューションよりもファイアウォールやプロキシをうまく通過します。

于 2009-10-18T23:21:10.060 に答える
1

同じマシン上で複数のサーバーをすべて同じポートにバインドして実行するには、それらを異なる IP アドレスにバインドする必要があります。同じ IP の同じポートにバインドする唯一の方法は、ソケットの SO_REUSESOCKET オプションを有効にすることですが、そうすると複数のサーバーが互いのインバウンド データを受信できるようになり、通信がめちゃくちゃになります。

それ以外の場合は、ヘッダーを使用して特定のフィードを識別する単一のサーバーを用意するのが最適です。なぜあなたはそれをしたくないのですか?

于 2009-10-08T20:53:17.463 に答える