Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Golang menggunakan RPC untuk melaksanakan perkhidmatan pemajuan

Cara Golang menggunakan RPC untuk melaksanakan perkhidmatan pemajuan

PHPz
PHPzasal
2023-04-13 09:05:01665semak imbas

RPC ialah protokol panggilan jauh yang digunakan untuk melaksanakan panggilan kaedah antara proses yang berbeza. Dalam seni bina perkhidmatan mikro, ia digunakan secara meluas untuk komunikasi antara perkhidmatan. Di Golang, kami boleh melaksanakan panggilan RPC dengan mudah melalui pakej net/rpc yang disediakan dalam perpustakaan standard. Artikel ini akan memperkenalkan cara menggunakan RPC untuk melaksanakan perkhidmatan pemajuan di Golang.

Pertama sekali, kita perlu memahami konsep asas RPC. Dalam RPC, terdapat dua peranan penting: klien dan pelayan. Pelanggan memanggil kaedah yang didedahkan oleh pelayan, dan pelayan menerima permintaan daripada klien dan mengembalikan hasil yang sepadan. Untuk melaksanakan RPC di Golang, kami perlu mentakrifkan objek perkhidmatan dahulu:

type ForwardService struct {}

func (s *ForwardService) Forward(req string, resp *string) error {
    // 处理请求,将结果写入resp中
    return nil
}

ForwardService ini ialah perkhidmatan yang perlu kami dedahkan, di mana kaedah Forward ditakrifkan untuk menerima permintaan daripada pelanggan dan Pemprosesan keputusan ditulis ke dalam resp. Di sini kami terus menetapkan jenis data permintaan dan tindak balas kepada jenis rentetan, yang boleh dilaraskan mengikut keperluan dalam situasi sebenar.

Seterusnya, kami perlu mendaftarkan objek perkhidmatan ini dengan perkhidmatan RPC:

func main() {
    // 创建服务对象
    service := new(ForwardService)

    // 注册服务
    rpc.Register(service)

    // 启动服务
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Fatal("Listen error: ", err)
    }

    for {
        conn, err := listener.Accept()
        if err != nil {
            log.Fatal("Accept error: ", err)
        }

        go rpc.ServeConn(conn)
    }
}

Dalam kod ini, kami mula-mula mencipta objek ForwardService bernama perkhidmatan, dan kemudian lulus rpc.Register mendaftarkannya ke dalam perkhidmatan RPC. Akhirnya, kami memulakan pendengar TCP dan terus menerima permintaan sambungan daripada klien, dan memulakan goroutine baharu untuk mengendalikan permintaan RPC pada sambungan ini.

Dengan objek perkhidmatan dan perkhidmatan RPC ini, kami boleh mula melaksanakan perkhidmatan pemajuan. Dalam perkhidmatan pemajuan ini, kami perlu memajukan permintaan daripada pelanggan kepada perkhidmatan sasaran yang ditentukan dan mendapatkan respons, dan kemudian mengembalikan respons kepada pelanggan. Berikut ialah pelaksanaan perkhidmatan pemajuan mudah:

func Forward(req string) (string, error) {
    // 连接目标服务
    conn, err := net.Dial("tcp", "target:8080")
    if err != nil {
        return "", err
    }
    defer conn.Close()

    // 构造RPC请求
    client := rpc.NewClient(conn)
    var resp string
    err = client.Call("ForwardService.Forward", req, &resp)
    if err != nil {
        return "", err
    }

    return resp, nil
}

Kaedah pemajuan ini menerima permintaan permintaan, dan kemudian menyambung ke alamat RPC perkhidmatan sasaran melalui net.Dail, kemudian membina permintaan RPC dan memanggil pelanggan . Kaedah Panggilan menghantar permintaan dan mendapat respons. Akhir sekali, kaedah pemajuan mengembalikan respons yang diambil.

Dalam penggunaan sebenar, kami boleh membungkus kaedah Forward ke dalam antara muka HTTP untuk memudahkan panggilan pelanggan:

func ForwardHandler(w http.ResponseWriter, r *http.Request) {
    req, _ := ioutil.ReadAll(r.Body)
    resp, err := Forward(string(req))
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    w.Write([]byte(resp))
}

func main() {
    http.HandleFunc("/", ForwardHandler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

Antara muka HTTP ini menerima permintaan daripada klien dan memanggil kaedah pemajuan Forward memajukan meminta perkhidmatan sasaran yang ditentukan dan mengembalikan respons yang diperoleh kepada pelanggan. Sepanjang proses, kami menggunakan pakej net/rpc yang disediakan dalam perpustakaan standard Golang untuk melaksanakan perkhidmatan pemajuan RPC yang mudah dan cekap.

Ringkasnya, artikel ini memperkenalkan kaedah penggunaan RPC untuk melaksanakan perkhidmatan pemajuan di Golang. Kami mula-mula menentukan objek perkhidmatan ForwardService dan mendaftarkannya dalam perkhidmatan RPC. Kemudian, sambung ke alamat RPC perkhidmatan sasaran melalui net.Dial, dan laksanakan pemajuan permintaan dan pemerolehan respons melalui permintaan RPC. Akhir sekali, kami membungkus kaedah pemajuan ke dalam antara muka HTTP untuk memudahkan panggilan pelanggan.

Atas ialah kandungan terperinci Cara Golang menggunakan RPC untuk melaksanakan perkhidmatan pemajuan. 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