【问题标题】:Http server - listening to responsesHttp 服务器 - 监听响应
【发布时间】:2013-02-02 00:45:40
【问题描述】:

我已阅读以下有关创建简单 http 服务的文章: Create a Simple Threaded HTTP Server with C# 在实现某些东西之前,我有点进退两难。

我有一个服务向多个目的地发送 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 请求数量有限,我应该为每个侦听器创建一个侦听器还是一个侦听器更好?

【问题讨论】:

  • “听取回应”?通常你发出一个请求并得到响应。这不是对 HttpListener 的描述,而只是一个普通的旧 http 请求。为什么两端都需要倾听?您是说您点击了远程设备,然后它向您发出自己的(单独的)请求?对发起请求发出响应不是更好吗?在我看来,至少对您实际尝试做的事情有些困惑。
  • @spender 我明白了。可能是我没有仔细考虑过。我的目标是将信息发送到一长串目的地。每次信息传输都可以包含一个小的查询请求或到目的地的文件传输。我想一次最多同时提交 X 次传输,然后等待响应。所以在我的情况下,一个简单的旧请求可能就足够了?谢谢

标签: c# http service request listener


【解决方案1】:

您考虑过 T ASP.net Webapi 吗?这应该正是您需要的 dp :-) 在那里,您还可以使用异步控制器,并且有大量示例。

【讨论】:

    【解决方案2】:

    等待accept 的 TCP 连接被放入连接积压中(默认为 100 IIRC,您可以在侦听器构造函数中更改它)。这意味着可能有 100 个并发 TCP 连接请求等待被接受。

    因此,除非您有超过该数量的连接等待处理,否则您不会丢失任何连接。

    【讨论】:

      猜你喜欢
      • 2016-12-29
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2021-04-14
      • 2019-06-08
      • 1970-01-01
      相关资源
      最近更新 更多