본문 바로가기
.Net

C#/.NET - HTTP Keep-alive 사용하기

by 올엠 2022. 4. 14.
반응형

Python 기준으로 Keep-alive를 사용하는 방법을 정리하였다.

Python - HTTP Keep-alive 를 통한 성능 향상 (asecurity.dev)

 

Python - HTTP Keep-alive 를 통한 성능 향상

HTTP Keep-Alive를 이용하면, TCP 세션을 연결하는 작업을 하지 않고 추가적인 데이터를 보낼 수 있기 때문에 많은 장점을 가지게 된다. Nginx에서도 Keep-alive를 활성화 할 경우 50%이상의 성능을 더 올릴

asecurity.dev

반대로 C#/.NET에서는 HttpClient를 통해 세션을 계속적으로 사용할 수 있다.

 

using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

namespace keepalive
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var url = "https://httpbin.org";

            var httpClient = new HttpClient();

            await httpClient.GetAsync(url);
            await httpClient.GetAsync(url);
            await httpClient.GetAsync(url);
            await httpClient.GetAsync(url);
            await httpClient.GetAsync(url);
        }
    }
}

 

세션을 연결되면, 아래 기본 값을 기준으로 사용된다. 혹시 이를 조정하고자 한다면,  아래 파라미터를 수정하여 가능하다.

Setting Default .NET Core
Idle connection timeout 2 mins SocketsHttpHandler.PooledIdleConnectionTimeout
Max connection lifetime Forever SocketsHttpHandler.PooledConnectionLifetime
using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

namespace keepalive
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var url = "https://httpbin.org";
            var socketHttpHandler = new SocketsHttpHandler()
            {
                PooledConnectionLifetime = TimeSpan.FromMinutes(5),
            };
            var httpClient = new HttpClient(socketHttpHandler);

            await httpClient.GetAsync(url);
            await httpClient.GetAsync(url);
            await httpClient.GetAsync(url);
            await httpClient.GetAsync(url);
            await httpClient.GetAsync(url);
        }
    }
}

 

만약 세션을 재사용하는 것이 싫다면, ConnectionClose 를 true로 설정하면 된다.

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.ConnectionClose = true;
반응형