Код: Выделить всё
// C# pseudo code, not in the right format
var socketsHandler = new SocketsHttpHandler
{
PooledConnectionLifetime = TimeSpan.FromSeconds(5) // just for demo purpose
};
public static client = new HttpClient(socketsHandler); // we use a single static `HttpClient`
// takes 3 seconds to finish a request as the server is slow
client.GetAsync("https://www.slowwebsite.com"); // create a TCP connection and put this connection in a pool
// after 3 seconds , send another request
client.GetAsync("https://www.slowwebsite.com"); // re-use the TCP connection
но через 5-ю секунду TCP-соединение должно быть закрыто, поскольку для PooledConnectionLifetime установлено значение 5 секунд.
Мой вопрос: закроется ли TCP-соединение немедленно (перейдет в состояние TIME_WAIT) )? если оно закрывается немедленно, разве второй запрос не будет прерван и остановлен?
Если TCP-соединение не будет закрыто немедленно и дождется завершения второго запроса, тогда соединение будет закрыто. закрыто, не так ли это делает IHttpClientFactory:
Код: Выделить всё
builder.Services.AddHttpClient("typicode", c =>
{
c.BaseAddress = new Uri("https://www.slowwebsite.com/");
})
.SetHandlerLifetime(TimeSpan.FromSeconds(5));
TCP-соединение было закрыто сразу по истечении времени, установленного параметром PooledConnectionLifetime. Срок действия атрибута истек, истечение срока действия обработчика не приведет к немедленному удалению TCP-соединения. Обработчик с истекшим сроком действия (управляемый SetHandlerLifetime) будет помещен в отдельный пул, который периодически обрабатывается для удаления обработчиков только тогда, когда они становятся недоступными.
Это похоже, что в моем примере HttpClient второй запрос будет прерван и остановлен?
Подробнее здесь: https://stackoverflow.com/questions/783 ... connection