RPC
RPC(Remote Procedure Call Protocol):远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
Golang的RPC包使用
需要遵守
方法是导出的
方法有俩个参数,都是导出类型或内建类型
方法的第二个参数是指针
方法只有一个error借口类型的返回值
服务端
func (t *T) MethodName(argType T1, replyType *T2) error
type Dog struct {
}
func (this *Dog) GetAdd(In int, Out *int) error {
*Out = In + 1
return nil
}
func main() {
// 实例化
pd := new(dog)
// rpc注册
rpc.Register(pd)
// rpc网络
rpc.HandleHTTP()
// 监听网络
ln, err := net.Listen("tcp", "0.0.0.0:10086")
if err != nil {
fmt.Println("net listen err:" , err)
return
}
// 等待网络连接
http.Serve(ln, nil)
}
客户端
Call(serviceMethod string, args interface{}), reply interface{}
- 第一个参数最好是复制以免写错
func main() {
// 连接服务器
cli, err := rpc.DialHTTP("tcp", "0.0.0.0:10086")
if err != nil {
fmt.Println("client connect err:", err)
return
}
var result int
// 调用函数
if err := cli.Call("Dog.GetAdd", 10, &result); err != nil {
fmt.Println("Call serviceMethod err:", err)
return
}
// 打印结果
fmt.Println("客户端得到结果:", result)
}