Go语言中的RPC(Remote Procedure Call,远程过程调用)时,可以使用Go标准库中的net/rpc
包来实现。下面会展示一个包含服务端和客户端的简单RPC示例。
首先,我们将创建一个RPC服务端,该服务端可以提供一种远程方法,比如提供两数相加的功能。
// 服务端
package main
import (
"net"
"net/rpc"
"log"
)
// 定义一个用于RPC的结构体类型
type Args struct {
A, B int
}
type Arith int
func (t *Arith) Add(args *Args, reply *int) error {
*reply = args.A + args.B
return nil
}
func main() {
arith := new(Arith)
rpc.Register(arith)
// 创建TCP网络监听
l, e := net.Listen("tcp", ":1234")
if e != nil {
log.Fatal("listen error:", e)
}
// 在监听上接收来自客户端的请求
rpc.Accept(l)
}
在上面的代码中,我们定义了一个Arith类型的结构体和一个Add方法。Add方法接收一个Args类型的指针作为参数,并通过指针传入的A和B值来计算它们的和,并将结果存储在reply指向的内存地址中。
接下来,我们将展示如何创建一个RPC客户端来调用服务端提供的Add方法。
在上面的代码中,我们定义了一个Arith类型的结构体和一个Add方法。Add方法接收一个Args类型的指针作为参数,并通过指针传入的A和B值来计算它们的和,并将结果存储在reply指向的内存地址中。
接下来,我们将展示如何创建一个RPC客户端来调用服务端提供的Add方法。
// 客户端
package main
import (
"net/rpc"
"log"
)
type Args struct {
A, B int
}
func main() {
// 连接到RPC服务
client, err := rpc.Dial("tcp", "localhost:1234")
if err != nil {
log.Fatal("Dialing:", err)
}
args := &Args{7, 8}
var reply int
// 调用远程方法
err = client.Call("Arith.Add", args, &reply)
if err != nil {
log.Fatal("Arith error:", err)
}
log.Println("Arith:", reply)
}
在上述客户端代码中,我们首先使用rpc.Dial函数连接到服务端的RPC服务。然后,我们创建一个包含参数的Args类型结构体,并调用服务端的Add方法。最后,我们打印出通过RPC返回的结果。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。