Heim >Backend-Entwicklung >Golang >Wie dupliziere ich HTTP-Anfragen an mehrere Server 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:
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 }
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!