示例:
server 端
package main
import(
"fmt"
"net"
"net/rpc" //rpc包
)
// 定义rpc请求
type AddRequest struct{
Left int
Right int
}
//定义rpc响应
type AddResponse Struct{
Result int
}
type Calc struct{}
// rpc的函数格式:
// 参数1:请求对象(可以是指针/值)
// 参数2:响应对象(可以是指针)
// 返回值:error
func (c *Calc) Add(req AddRequest,resp *AddResponse)error{
fmt.Println("calc.add")
resp.Result=req.Left + req.Right
return nil
}
type AAA struct {}
func(a *AAA)Add(req AddRequest,resp *AddResponse)error{
fmt.Println("add.Add")
return nil
}
func main(){
//rpc 注册
rpc.Register(&Calc{})
rpc.Register(&AAA{})
//启动监听
listener,_:=net.Listen("tcp","0.0.0.0:8888")
rpc.Accept(listener) //使用rpc的Accept
listenner.Close()
}
客户端
package main
import(
"fmt"
"net/rpc"
)
//将服务器端顶底请求、响应结构体拷贝过来
// 定义rpc请求
type AddRequest struct{
Left int
Right int
}
//定义rpc响应
type AddResponse Struct{
Result int
}
func main(){
client,err:=rpc.Dial("tcp","127.0.0.1:8888") //使用rpc.Dial来发起一个连接
if err!=nil{
fmt.Println(err)
return
}
//实现调用
req:=AddRequest{2,3}
resp:=AddResponse{}
//调用
err=client.Call("Calc.Add",req,&resp) //Calc.Add表示调用服务器端 Calc.Add
fmt.Println(err,resp)
client.Close()
}
文档更新时间: 2021-09-15 14:28 作者:张尚