Heim > Backend-Entwicklung > Golang > Wie dupliziere ich HTTP-Anfragen an mehrere Server in Go for Seamless Server Transitions?

Wie dupliziere ich HTTP-Anfragen an mehrere Server in Go for Seamless Server Transitions?

DDD
Freigeben: 2024-12-01 16:47:12
Original
712 Leute haben es durchsucht

How to Duplicate HTTP Requests to Multiple Servers in Go for Seamless Server Transitions?

Duplizieren von HTTP-Anfragen an mehrere Server in Go

Beim Übergang von einer Serverversion zu einer anderen kann es wünschenswert sein, eingehende HTTP-Anfragen zu duplizieren auf beide Versionen für eine nahtlose Übergabe. Der naive Ansatz, die Anfrage direkt zu ändern, führt jedoch zu einem Fehler.

Um dieses Problem zu beheben, besteht die Lösung darin, eine neue HTTP-Anfrage zu erstellen und die erforderlichen Teile aus der eingehenden Anfrage zu kopieren. Dies beinhaltet:

  1. Puffern des Anforderungstexts: Da möglicherweise auf beiden Servern derselbe Text verwendet werden muss, muss er zum Lesen gepuffert werden.
  2. Erneutes Erstellen der Anfrage: Eine neue HTTP-Anfrage wird mit der ursprünglichen Methode und einer aus dem RequestURI erstellten URL erstellt. Relevante Header werden kopiert.

Hier ist ein Codebeispiel:

func handler(w http.ResponseWriter, req *http.Request) {
    body, err := ioutil.ReadAll(req.Body)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    req.Body = ioutil.NopCloser(bytes.NewReader(body))

    url := fmt.Sprintf("%s://%s%s", proxyScheme, proxyHost, req.RequestURI)
    proxyReq, err := http.NewRequest(req.Method, url, bytes.NewReader(body))

    proxyReq.Header = make(http.Header)
    for h, val := range req.Header {
        proxyReq.Header[h] = val
    }

    resp, err := httpClient.Do(proxyReq)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadGateway)
        return
    }
    defer resp.Body.Close()

    // legacy code
}
Nach dem Login kopieren

Dieser Ansatz stellt sicher, dass sowohl die Legacy- als auch die neue Serverversion doppelte Anfragen erhalten, ohne die ursprüngliche Anfrage zu ändern.

Das obige ist der detaillierte Inhalt vonWie dupliziere ich HTTP-Anfragen an mehrere Server in Go for Seamless Server Transitions?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage