gpt4 book ai didi

c# - 将异步 HttpWebResponse 与 C# 中的 HttpWebRequest 匹配

转载 作者:行者123 更新时间:2023-11-30 18:02:27 27 4
gpt4 key购买 nike

我正在使用 C# 对 HTTP 流水线功能进行一些测试。一切正常,但我有一个问题。

在一个类中,我有以下代码允许我异步获取 HTTPWebRequest 并处理响应:

public void getResponseAsync()
{
RequestState rs = new RequestState();
rs.Request = this.webRequest; //On ajoute la requete dans l'objet état pour pouvoir le récupérer dans la callback
IAsyncResult ar = rs.Request.BeginGetResponse(new AsyncCallback(this.ResponseCallback), rs); // Appel asynchrone
}

public void ResponseCallback(IAsyncResult ar)
{
RequestState rs = (RequestState)ar.AsyncState; //Récupération de l'objet etat
HttpWebRequest req = rs.Request; //Récupération de la requete web (object HttpWebRequest)
try //Récupération de la réponse Web
{
HttpWebResponse resp = (HttpWebResponse)req.EndGetResponse(ar);
this.incomingBuffer = Helpers.getBufferFromStream(resp.GetResponseStream());
resp.Close();
this.state = true;
}
catch (Exception)
{
this.state = false;
}
}

}
// La classe RequestState est utilise pour transmettre l'objet HttpWebRequest
// a travers l'appel asynchrone
public class RequestState
{
public HttpWebRequest Request;

public RequestState()
{
Request = null;
}
}

该片段工作正常,但我不明白 c# 的功能。我不明白 C# 如何识别响应数据包并将其关联到我的请求?因为在 HTTP 规范中,HTTP 响应中没有“标识符”。

那么 C# 如何将响应与请求相匹配呢?是否带有ack和seq号?

最佳答案

C# 不做匹配。它由操作系统处理。请记住,这些 HTTP 请求和响应是通过 TCP 传输和接收的。它是将低级响应与请求相匹配的 TCP 实现,操作系统中的异步 I/O 层将 TCP 内容与您的 C# 回调相匹配。

这是一个简化的解释,但基本上是正确的。如果您想了解更多详细信息,则必须阅读操作系统内部结构,特别是一般 Windows I/O 的实现,尤其是 TCP。

关于c# - 将异步 HttpWebResponse 与 C# 中的 HttpWebRequest 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8076678/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com