複数のhttpリクエストに応答できる必要があるWebサービスを作成しています。私が理解していることから、私はHttpListenerを扱う必要があります。httpリクエスト(またはより良いのは複数のhttpリクエスト)を受信し、それを変換して結果を発信者に送り返すための最良の方法は何ですか?スレッドでHttpListenersを使用するのはどのくらい安全ですか?
ありがとう
複数のhttpリクエストに応答できる必要があるWebサービスを作成しています。私が理解していることから、私はHttpListenerを扱う必要があります。httpリクエスト(またはより良いのは複数のhttpリクエスト)を受信し、それを変換して結果を発信者に送り返すための最良の方法は何ですか?スレッドでHttpListenersを使用するのはどのくらい安全ですか?
ありがとう
通常、接続を受け入れ、新しいスレッドまたはスレッドプール内の空きスレッドのいずれかによって処理される要求を渡すメインスレッドを設定します。でも、あなたは正しい方向に進んでいると思います。
次のようなものを探しています。
while (boolProcessRequests)
{
HttpListenerContext context = null;
// this line blocks until a new request arrives
context = listener.GetContext();
Thread T = new Thread((new YourRequestProcessorClass(context)).ExecuteRequest);
T.Start();
}
詳細な説明の編集Webサーバーにアクセスできず、独自のWebサービスをロールする必要がある場合は、次の構造を使用します。
接続/要求を受け入れ、それらが到着するとすぐに、接続を無料の脅威に渡して処理する1つのメインスレッド。あなたのリクエストを処理するウェイター/ウェイトレスにあなたを渡すレストランのホステスのようなものです。
この場合、ホステス(メインスレッド)にはループがあります。-新しい到着をドアで待ちます-空きテーブルを見つけてそこに常連客を座らせ、ウェイターに電話してリクエストを処理します。-ドアに戻って待ちます。
上記のコードでは、リクエストはHttpListernContextオブジェクト内にパッケージ化されています。それらが到着すると、メインスレッドは新しいスレッドとリクエストデータ(コンテキスト)で初期化される新しいRequestProcessorクラスを作成します。次に、RequsetProcessorは、コンテキストオブジェクト内のResponseオブジェクトを使用して、要求に応答します。明らかに、スレッドによって実行されるYourRequestProcessorClassとExecuteRequestのような関数を作成する必要があります。
使用しているプラットフォームはわかりませんが、ここでスレッド化するための.Netの例と、ここ でhttplistenerの例を見ることができます。