728x90

C#에서 멀티스레드 HTTP 통신을 호스팅하는 방법은 여러 가지가 있습니다. 일반적으로 HttpListener를 사용하여 간단한 HTTP 서버를 구축할 수 있으며, 이를 멀티스레드로 처리하여 여러 클라이언트 요청을 동시에 처리할 수 있습니다. 여기서는 간단한 예제를 통해 C#에서 멀티스레드 HTTP 서버를 구현하는 방법을 설명하겠습니다.

1. 기본적인 HttpListener 설정

먼저, HttpListener를 사용하여 HTTP 서버를 설정하고, 클라이언트의 요청을 수신하는 부분을 작성합니다.

using System;
using System.Net;
using System.Threading;

class Program
{
    static void Main(string[] args)
    {
        // HttpListener 인스턴스 생성
        HttpListener listener = new HttpListener();
        listener.Prefixes.Add("http://localhost:8080/");  // 접속 URL 설정
        listener.Start();  // 리스너 시작
        Console.WriteLine("Listening...");

        while (true)
        {
            // 클라이언트의 요청을 비동기적으로 대기
            HttpListenerContext context = listener.GetContext();
            ThreadPool.QueueUserWorkItem(o => HandleRequest(context));
        }
    }

    static void HandleRequest(HttpListenerContext context)
    {
        HttpListenerRequest request = context.Request;
        HttpListenerResponse response = context.Response;

        // 요청 처리 (간단한 예: "Hello World" 응답)
        string responseString = "<html><body>Hello World</body></html>";
        byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);

        response.ContentLength64 = buffer.Length;
        using (System.IO.Stream output = response.OutputStream)
        {
            output.Write(buffer, 0, buffer.Length);
        }

        response.Close();  // 응답 완료
    }
}

2. 멀티스레드 처리

위 코드에서 HttpListener는 클라이언트 요청을 받으면 GetContext 메서드를 통해 HttpListenerContext 객체를 가져옵니다. 이 객체는 요청(Request)과 응답(Response)에 대한 정보를 가지고 있습니다.

멀티스레딩을 통해 여러 요청을 동시에 처리하기 위해 ThreadPool.QueueUserWorkItem 메서드를 사용하여 요청을 처리하는 HandleRequest 메서드를 별도의 스레드에서 실행하게 합니다.

3. 실행 방법

이 코드를 컴파일하고 실행하면, 로컬에서 http://localhost:8080/로 접속할 수 있는 간단한 HTTP 서버가 실행됩니다. 여러 클라이언트가 동시에 접속해도 각각의 요청이 별도의 스레드에서 처리되기 때문에 동시 처리 가능합니다.

4. 개선 사항

이 예제는 매우 간단한 HTTP 서버의 예이므로, 실제 서비스에서는 보안, 오류 처리, 효율적인 스레드 관리 등 여러 가지 추가적인 고려 사항이 필요합니다. 예를 들어, 스레드 풀의 크기 제한, 로깅, 요청에 따른 동적 처리 등이 필요할 수 있습니다.

이와 같은 기본 구조를 바탕으로 필요에 따라 기능을 확장하고 최적화할 수 있습니다.

728x90
반응형

'Software > C#' 카테고리의 다른 글

C# 시작하기 - 세션  (0) 2024.08.19
C# 시작하기 - http 쿠키  (0) 2024.08.17
C# 시작하기 - 피아노 소리  (0) 2024.07.29
C# 시작하기 - WebSocket  (0) 2024.07.28
MAUI 시작하기 - HttpClient 및 WebSocket  (0) 2024.07.28

+ Recent posts