第一次请求或怠速大约100秒后的请求非常慢,需要15-30秒。没有空转的任何请求只需不到一秒钟。我对第一个请求花时间没问题,只是没有导致减速的小空闲时间。
对于客户端来说,减速并不是唯一的,如果我继续在一个客户端上发出请求,那么它会在另一个客户端上保持快速。只有当所有人都空闲100秒时才会减速。
以下是我尝试过的一些更改:
它与IIS应用程序池回收无关,因为默认设置为20mn,应用程序的其余部分仍然很快。
请求是指与AWS S3通信以获取文件的Web服务。我现在对这些想法感到茫然,我的所有研究都让我得到了我已经尝试过的上述观点。任何想法将不胜感激!
这是方法: `
//get httpclient singleton or create
var httpClient = HttpClientProvider.FileServiceHttpClient;
var queryString = string.Format("?key={0}", key);
var request = new HttpRequestMessage(HttpMethod.Get, queryString);
var response = httpClient.SendAsync(request).Result;
if (response.IsSuccessStatusCode)
{
var metadata = new Dictionary<string, string>();
foreach (var header in response.Headers)
{
//grab tf headers
if (header.Key.StartsWith(_metadataHeaderPrefix))
{
metadata.Add(header.Key.Substring(_metadataHeaderPrefix.Length), header.Value.First());
}
}
var virtualFile = new VirtualFile
{
QualifiedPath = key,
FileStream = response.Content.ReadAsStreamAsync().Result,
Metadata = metadata
};
return virtualFile;
}
return null;
答案 0 :(得分:0)
默认的空闲超时约为1-2分钟。之后,客户端必须与服务器重新握手。因此,您会发现100秒后速度会变慢。
您可以使用套接字处理程序来延长空闲超时。
{{1}}
如您所见,尽管我将空闲超时设置为27小时,但实际上它只保留5分钟。
因此,最后,我仅每1分钟使用相同的HttpClient调用目标端点。在这种情况下,始终存在已建立的连接。您可以使用netstat进行检查。很好。