Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menduakan Permintaan HTTP kepada Berbilang Pelayan dalam Go untuk Peralihan Pelayan Lancar?

Bagaimana untuk Menduakan Permintaan HTTP kepada Berbilang Pelayan dalam Go untuk Peralihan Pelayan Lancar?

DDD
DDDasal
2024-12-01 16:47:12709semak imbas

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

Menduakan Permintaan HTTP kepada Berbilang Pelayan dalam Go

Apabila beralih daripada satu versi pelayan ke versi pelayan yang lain, adalah wajar untuk menduplikasi permintaan HTTP yang masuk kepada kedua-dua versi untuk penyerahan yang lancar. Walau bagaimanapun, pendekatan naif untuk mengubah suai permintaan secara langsung dipenuhi dengan ralat.

Untuk menangani perkara ini, penyelesaiannya terletak pada mencipta permintaan HTTP baharu dan menyalin bahagian yang diperlukan daripada permintaan masuk. Ini melibatkan:

  1. Menimbal badan permintaan: Memandangkan badan yang sama mungkin perlu digunakan dalam kedua-dua pelayan, ia mesti ditimbal untuk membaca.
  2. Membina semula permintaan: Permintaan HTTP baharu dibuat dengan kaedah asal dan URL dibuat daripada RequestURI. Pengepala yang berkaitan disalin.

Berikut ialah contoh kod:

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
}

Pendekatan ini memastikan kedua-dua versi pelayan lama dan baharu menerima permintaan pendua tanpa mengubah suai permintaan asal.

Atas ialah kandungan terperinci Bagaimana untuk Menduakan Permintaan HTTP kepada Berbilang Pelayan dalam Go untuk Peralihan Pelayan Lancar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn