2

我已经阅读了以下关于创建简单 http 服务的文章: 使用 C# 创建简单的线程 HTTP 服务器 在实现某些东西之前,我有点进退两难。

我有一项服务将 http 请求发送到多个目的地(同时限制最大目的地),并从每个目的地接收响应。响应很短,只有一个状态(如果正常,则为 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          }

我需要向设备发送请求并听取每个设备的响应。如果我得到一个响应,并且直到循环返回到监听命令(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 回答