如何收听保持活跃的HttpResponseMessage直到它关闭?
我正在使用HttpClient
向远程Web服务器发送异步POST请求。 该远程Web服务器响应Connection标头设置为keep-alive
。 最终,它将关闭连接。
我无法弄清楚怎么做是继续接收数据,直到连接设置为关闭。
例如,请考虑以下代码:
HttpClient client = new HttpClient(); string requestUri = ...; //My GET uri string content = ...; //url-encoded contents of the request HttpResponseMessage response = await client.PostAsync(requestUri, new StringContent(content));
在上面的代码中, response
将Connection
标头设置为keep-alive
。 我找不到HttpResponseMessage上的任何成员似乎在收到第一个keep-alive
后给我任何继续接收信息的方法。
在Connection关闭之前,我无法弄清楚如何继续接收响应。
我能够找到处理发送keep-alive
请求的各种资源。 那不是我的问题。 我的问题是接收/处理来自服务器的keep-alive
响应。
如果我能提供更多信息以便改进这个问题,请告诉我。
Connection: keep-alive
目的不是让服务器为同一个请求发送多个响应 – 这从根本上违反了HTTP的工作方式。
Connection: keep-alive
是服务器向客户端发信号的方式,客户端可以使用相同的,已建立的TCP连接提交下一个请求,从而有助于避免建立新连接(以及可能的TLS握手)的成本。
重复使用连接(通常)由底层库处理,并被抽象出来,使得库的用户(如开发人员)不必担心处理。
您应该做的就是继续制作尽可能多的client.Post/Get/etc
请求,并且HttpClient
库将负责管理底层TCP连接及其重用。
HTTP中有一个区域可能与上述内容背道而驰,因此令人困惑,但事实并非如此。 情况是服务器返回HTTP状态100 Continue
。 在这种情况下,您将看到来自服务器的另一个响应仍然是相同的原始请求(并且“请参阅”我的意思不是来自HttpClient
,而是通过线路,如果您使用WireShark或代理等工具窥探)。 在这种情况下发生的情况是,如果客户端发出大量请求,服务器只是向客户端发出信号,表示它继续接受并读取请求,并且客户端继续发送该原始请求。 收到完整请求后,服务器将处理并回复最终响应代码和消息。 而且, HttpClient
将抽象出这个临时100 Continue
响应,所以作为开发人员你不必担心它(在大多数情况下(如果不是所有情况))。
如果你想要的只是收到给定请求的响应,你根本不需要处理keep-alive。 Keep-alive纯粹是一种性能优化。 该框架透明地管理连接。
您所做的就是发送请求并收到回复。 每个请求只有一个响应。
一方最终将关闭与您无关的连接。 你没有注意到它的任何影响。
上述就是C#学习教程:如何收听保持活跃的HttpResponseMessage直到它关闭?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/990640.html