2

簡単な http サービスを作成するための次の記事を読みました: Create a Simple Threaded HTTP Server with C# 何かを実装する前に、少しジレンマに陥っています。

http リクエストを複数の宛先に送信し (同時に宛先の最大数に制限があります)、各宛先から応答を受信するサービスがあります。応答は短く、要求が正しく処理されたかどうかのステータス (OK の場合は 200、またはその他のコード) のみです。

上記の記事では、ブロックされてリクエストをリッスンしている while ループ内にリスナーを作成しています。

23          private static void Listen()
24          {
25              listener.Start();
26              WriteLog("Listening On: " + port.ToString());
27   
28              while (true)
29              {
30                  WriteLog("Waiting for connection...");
31                  TcpClient client = listener.AcceptTcpClient();
32                  Thread listenThread 
                       = new Thread(new ParameterizedThreadStart(ListenThread));
33                  listenThread.Start(client);
34              }
35          }

デバイスにリクエストを送信し、それぞれからの応答をリッスンする必要があります。1 つの応答を取得した場合、ループがリッスン コマンド (31) に戻るまで、別の応答がすり抜けてしまう可能性はありますか?

処理する HTTP リクエストの量が限られている場合、各リスナーに対してリスナーを作成する必要がありますか?

4

2 に答える 2

1

T ASP.net Webapi を検討しましたか? これはまさにあなたが必要とするものをdpするはずです:-)そこには非同期コントローラーもあり、たくさんの例があります。

于 2013-02-17T14:07:19.277 に答える
1

待機中のTCP 接続acceptは接続バックログに入れられます (デフォルトでは 100 IIRC ですが、リスナー コンストラクターで変更できます)。つまり、100 の同時 TCP 接続要求が受け入れられるのを待っている可能性があります。

そのため、処理待ちの接続数を超えない限り、失われることはありません。

于 2013-02-17T14:11:07.080 に答える