> 백엔드 개발 > Golang > Go에서 여러 HTTP 멀티플렉서를 어떻게 결합할 수 있나요?

Go에서 여러 HTTP 멀티플렉서를 어떻게 결합할 수 있나요?

Linda Hamilton
풀어 주다: 2024-11-01 06:41:31
원래의
686명이 탐색했습니다.

How Can You Combine Multiple HTTP Multiplexers in Go?

Go에서 여러 HTTP 멀티플렉서 결합

동일한 포트 번호에서 서비스해야 하는 http.ServeMux의 두 인스턴스가 주어지면 이를 달성하는 방법에는 여러 가지가 있습니다.

중첩 멀티플렉서 사용

이후 http.ServeMux는 http.Handler 인터페이스를 구현하며 다른 멀티플렉서 내에 중첩될 수 있습니다. 한 가지 예는 StripPrefix() 함수를 사용하여 요청 URL에서 접두사를 제거하고 이를 중첩된 멀티플렉서에 전달하는 핸들러를 생성하는 것입니다.

<code class="go">rootMux := http.NewServeMux()
subMux := http.NewServeMux()

// Handle requests to /top_path/sub_path
subMux.HandleFunc("/sub_path", myHandleFunc)

// Strip the /top_path prefix from the URL before passing it to subMux
rootMux.Handle("/top_path/", http.StripPrefix("/top_path", subMux))

http.ListenAndServe(":8000", rootMux)</code>
로그인 후 복사

사용자 정의 핸들러를 사용하는 대체 접근 방식

또 다른 접근 방식은 두 개의 멀티플렉서를 결합하는 사용자 정의 핸들러를 만드는 것입니다.

<code class="go">import (
    "net/http"
)

// CombinedMux combines multiple http.ServeMux instances.
type CombinedMux struct {
    muxes []http.Handler
}

// ServeHTTP implements the http.Handler interface for CombinedMux.
func (c *CombinedMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    for _, mux := range c.muxes {
        mux.ServeHTTP(w, r)
    }
}

func main() {
    muxA, muxB := http.NewServeMux(), http.NewServeMux()

    // Initialize muxA and muxB

    combinedMux := &CombinedMux{
        muxes: []http.Handler{muxA, muxB},
    }

    http.ListenAndServe(":8080", combinedMux)
}</code>
로그인 후 복사

이 접근 방식에서 CombinedMux 처리기는 멀티플렉서 목록을 반복하고 제공 논리를 순서대로 각 항목에 위임합니다. 이 방법을 사용하면 중첩된 멀티플렉서 접근 방식과 달리 각 요청에 대해 여러 핸들러가 호출될 수 있습니다.

두 접근 방식 모두 여러 http.ServeMux 인스턴스를 결합하여 동일한 포트 번호에서 제공하는 방법을 제공합니다. 귀하의 요구 사항에 가장 적합한 접근 방식을 선택하세요.

위 내용은 Go에서 여러 HTTP 멀티플렉서를 어떻게 결합할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿