Rumah  >  Artikel  >  pembangunan bahagian belakang  >  permintaan rpc pemajuan golang

permintaan rpc pemajuan golang

王林
王林asal
2023-05-13 09:04:36520semak imbas

Dengan perkembangan pesat sistem teragih, RPC (Remote Procedure Call) telah digunakan secara meluas dalam pelbagai senario. RPC membenarkan pelbagai nod dalam sistem teragih untuk memanggil satu sama lain, dengan itu mencapai kerjasama yang lebih cekap.

Dalam sistem RPC biasa, biasanya terdapat nod pelayan yang bertanggungjawab untuk mendengar permintaan daripada nod klien dan memajukan permintaan ini ke nod pemprosesan yang sesuai. Artikel ini akan memperkenalkan cara menggunakan Golang untuk melaksanakan proses asas pemajuan permintaan RPC.

Konsep asas

Sebelum melaksanakan pemajuan permintaan RPC, mari kita fahami konsep asas berikut:

  1. Pelanggan RPC: menghantar permintaan RPC Nod menghantar permintaan kepada Pelayan RPC dan menunggu respons;
  2. Pelayan RPC: nod yang menerima dan memproses permintaan RPC, dan melaksanakan panggilan jauh dalam sistem yang diedarkan dengan memajukan permintaan
  3. nod pemprosesan : The nod yang benar-benar melaksanakan permintaan RPC dan mengembalikan hasil tindak balas.

RPC biasanya menggunakan mod pelayan-pelanggan Dua hujung pautan permintaan ialah klien dan pelayan. Pelanggan memulakan permintaan, pelayan menerima permintaan dan mengedarkan permintaan kepada nod pemprosesan Nod pemprosesan terakhir melaksanakan permintaan dan mengembalikan hasilnya kepada pelayan, dan pelayan mengembalikan hasilnya kepada klien.

Pemajukan permintaan RPC

Dalam sistem RPC yang ringkas, klien RPC menghantar permintaan kepada pelayan RPC Pelayan RPC mencari nod pemprosesan yang sepadan berdasarkan nama kaedah yang diminta dan memajukan permintaan kepada Memproses nod. Nod pemprosesan melaksanakan permintaan dan kemudian mengembalikan hasil respons kepada pelayan RPC, dan pelayan RPC akhirnya mengembalikan hasil respons kepada klien RPC.

Apabila melaksanakan pemajuan permintaan RPC, anda perlu melengkapkan langkah berikut:

  1. Melaksanakan klien RPC: Gunakan pakej net/rpc dalam bahasa Golang untuk melaksanakan klien RPC dan menghantar Permintaan ke pelayan RPC, menunggu jawapan dan mengembalikan hasilnya kepada pemanggil.
  2. Laksanakan pelayan RPC: Gunakan pakej http dan net/rpc dalam bahasa Golang untuk melaksanakan pelayan RPC, mendengar permintaan daripada klien RPC, memajukan permintaan ke nod pemprosesan untuk pelaksanaan, dan akhirnya mengembalikan keputusan tindak balas kepada pelanggan RPC.
  3. Laksanakan nod pemprosesan: Gunakan pakej net/rpc dalam bahasa Golang untuk melaksanakan perkhidmatan RPC dalam nod pemprosesan, dan daftarkan perkhidmatan RPC dengan pelayan RPC supaya pelayan RPC boleh memajukan permintaan dengan betul ke nod pemprosesan.

Di bawah, kami akan menerangkan langkah-langkah ini secara terperinci.

Melaksanakan klien RPC

Dalam bahasa Golang, anda boleh menggunakan pakej net/rpc untuk melaksanakan klien RPC. Pertama, anda perlu menentukan struktur klien RPC, termasuk beberapa parameter yang diperlukan oleh klien RPC, seperti alamat dan nombor port pelayan RPC.

type RpcClient struct {
    Host string
    Port int
}

Seterusnya, kita perlu melaksanakan kaedah Invoke, yang digunakan untuk menghantar permintaan RPC dan menunggu jawapan. Proses pelaksanaan kaedah Invoke adalah seperti berikut:

func (c *RpcClient) Invoke(method string, args interface{}, reply interface{}) error {
    client, err := rpc.DialHTTP("tcp", fmt.Sprintf("%s:%d", c.Host, c.Port))
    if err != nil {
        return err
    }
    defer client.Close()

    err = client.Call(method, args, reply)
    if err != nil {
        return err
    }

    return nil
}

Dalam kaedah Invoke, kami mula-mula menyambung ke pelayan RPC melalui protokol HTTP dan mencipta klien RPC menggunakan kaedah rpc.DialHTTP. Seterusnya, kami memanggil kaedah client.Call untuk menghantar permintaan RPC ke pelayan RPC dan menunggu respons. Akhirnya, kami kembalikan respons kepada pemanggil.

Melaksanakan pelayan RPC

Dalam bahasa Golang, anda boleh menggunakan pakej http dan net/rpc untuk melaksanakan pelayan RPC. Pertama, kita perlu menentukan struktur pelayan RPC, termasuk beberapa parameter yang diperlukan oleh pelayan RPC, seperti alamat mendengar dan nombor port.

type RpcServer struct {
    Host string
    Port int
}

Seterusnya, kita perlu melaksanakan kaedah Serve dalam pelayan RPC, yang digunakan untuk memulakan pelayan RPC dan mendengar permintaan daripada klien RPC. Proses pelaksanaan kaedah Serve adalah seperti berikut:

func (s *RpcServer) Serve() error {
    err := rpc.Register(&RpcService{})
    if err != nil {
        return err
    }

    rpc.HandleHTTP()

    l, err := net.Listen("tcp", fmt.Sprintf("%s:%d", s.Host, s.Port))
    if err != nil {
        return err
    }

    defer l.Close()

    http.Serve(l, nil)

    return nil
}

Dalam kaedah Serve, kami mula-mula menggunakan kaedah rpc.Register untuk mendaftarkan perkhidmatan RPC ke dalam pelayan RPC. Antaranya, RpcService ialah struktur yang melaksanakan perkhidmatan RPC Kami akan menerangkannya secara terperinci dalam bahagian seterusnya. Seterusnya, kami menggunakan kaedah rpc.HandleHTTP untuk mengikat perkhidmatan RPC kepada protokol HTTP. Akhir sekali, kami menggunakan kaedah http.Serve untuk mula mendengar permintaan daripada klien RPC dan memajukan permintaan ke nod pemprosesan.

Laksanakan nod pemprosesan

Dalam nod pemprosesan, anda perlu menggunakan pakej net/rpc untuk melaksanakan perkhidmatan RPC. Pertama, kita perlu menentukan struktur perkhidmatan RPC, termasuk beberapa kaedah dan parameter yang diperlukan oleh perkhidmatan RPC.

type RpcService struct {}

func (s *RpcService) RpcMethod(args *RpcArgs, reply *RpcReply) error {
    // 处理RPC请求
    return nil
}

Dalam kod di atas, kami mentakrifkan struktur RpcService, yang mengandungi kaedah RPC bernama RpcMethod. Dalam kaedah RpcMethod, kami mengendalikan permintaan RPC dan mengembalikan hasil respons.

Seterusnya, kita perlu mendaftarkan struktur RpcService dengan pelayan RPC.

func main() {
    // 初始化处理节点
    rpcService := new(RpcService)
    rpc.Register(rpcService)

    // 启动RPC服务器
    rpcServer := &RpcServer{
        Host: "0.0.0.0",
        Port: 8080,
    }
    rpcServer.Serve()
}

Dalam kod di atas, kami mula-mula memulakan nod pemprosesan dan menggunakan kaedah rpc.Register untuk mendaftarkan struktur RpcService ke dalam pelayan RPC. Kemudian, kami memulakan pelayan RPC, mula mendengar permintaan daripada klien RPC, dan memajukan permintaan ke nod pemprosesan untuk pelaksanaan.

Ringkasan

Artikel ini memperkenalkan cara menggunakan bahasa Golang untuk melaksanakan proses asas pemajuan permintaan RPC. Apabila melaksanakan pemajuan permintaan RPC, anda perlu melaksanakan klien RPC, pelayan RPC dan nod pemprosesan. Dalam klien RPC, kami menggunakan pakej net/rpc untuk melaksanakan kaedah Invoke untuk menghantar permintaan RPC dan menunggu jawapan. Dalam pelayan RPC, kami menggunakan pakej http dan net/rpc untuk melaksanakan kaedah Serve yang memulakan pelayan RPC dan mendengar permintaan daripada klien RPC. Dalam nod pemprosesan, kami menggunakan pakej net/rpc untuk melaksanakan perkhidmatan RPC dan mendaftarkan perkhidmatan RPC dengan pelayan RPC supaya pelayan RPC boleh memajukan permintaan dengan betul ke nod pemprosesan.

Atas ialah kandungan terperinci permintaan rpc pemajuan golang. 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