2

Microsoft Azure で ServiceBus Relay をセットアップしました。リレーにヒットする着信 GET および POST リクエストを処理する HTTP バックエンドでこれに接続しています。

これで問題なく動作します。私の問題は、取得できる最大同時実行数が 2 つの同時リクエストであることです。つまり、バックエンドは同時に 2 つのリクエストしか受信できず、さらにリクエストがある場合、前のリクエストが処理されて完了するまで停止されます。サービス動作で同時実行数を増やしてみましたが、これは無視されているようですが、同時実行数を 1 に下げると設定が機能しているようです。これは実際のリレーによって課せられたある種の制限だと思います!? しかし、それは本当にあり得るでしょうか?2つだけ?私のシナリオでは、これによりリレーが使用できなくなります。これは、リクエストが時間のかかる処理 (2 秒) を実行する必要があり、遅延することができず、即時の応答が必要になるためです。したがって、リクエストを単純に保存してキューのように処理することはできません。

どうすればこれをスケールアウトできますか? さらにリレーを追加して、それらすべてに接続しますか?

4

1 に答える 1

1

ServicePointManager.DefaultConnectionLimitより多くの同時接続を許可するには、適切な値に設定する必要があります。アプリケーション コードのできるだけ早い段階でこれを実行してみてください。

ServicePointManager.DefaultConnectionLimit = int.MaxValue;

これにより、アプリケーションは (実際には) 無制限の数の同時 HTTP 接続を開くことができます。


デフォルトの制限は、HTTP プロトコルが最初にどのように設計されたかによるものです。

次の引用は、HTTP/1.1 RFC のセクション 8.1.4からのものです。

シングルユーザー クライアントは、サーバーまたはプロキシとの接続を 2 つ以上維持すべきではありません [...] これらのガイドラインは、HTTP 応答時間を改善し、輻輳を回避することを目的としています。

したがって、準拠しているクライアントは、通常、1 つのサーバーに対して 2 つ以上の接続が開いていないことを確認する必要があります。

ただし、これは変更されており、この動作をオーバーライドすることができます。次の引用は、HTTP/1.1 プロトコルの更新であるRFC 7230 のセクション 6.4からのものです。

HTTP の以前のリビジョンでは、上限として特定の接続数が指定されていましたが、これは多くのアプリケーションにとって非現実的であることが判明しました。その結果、この仕様は特定の最大接続数を義務付けていませんが、代わりに、クライアントが複数の接続を開くときに慎重になることを奨励しています。

于 2015-02-26T09:23:20.113 に答える