[英]Match an asynchronous HttpWebResponse to a HttpWebRequest in C#
我正在使用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的實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.