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.
Sebelum melaksanakan pemajuan permintaan RPC, mari kita fahami konsep asas berikut:
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.
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:
net/rpc
dalam bahasa Golang untuk melaksanakan klien RPC dan menghantar Permintaan ke pelayan RPC, menunggu jawapan dan mengembalikan hasilnya kepada pemanggil. 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. 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.
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.
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.
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.
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!