示例:

server 端

  1. package main
  2. import(
  3. "fmt"
  4. "net"
  5. "net/rpc" //rpc包
  6. )
  7. // 定义rpc请求
  8. type AddRequest struct{
  9. Left int
  10. Right int
  11. }
  12. //定义rpc响应
  13. type AddResponse Struct{
  14. Result int
  15. }
  16. type Calc struct{}
  17. // rpc的函数格式:
  18. // 参数1:请求对象(可以是指针/值)
  19. // 参数2:响应对象(可以是指针)
  20. // 返回值:error
  21. func (c *Calc) Add(req AddRequest,resp *AddResponse)error{
  22. fmt.Println("calc.add")
  23. resp.Result=req.Left + req.Right
  24. return nil
  25. }
  26. type AAA struct {}
  27. func(a *AAA)Add(req AddRequest,resp *AddResponse)error{
  28. fmt.Println("add.Add")
  29. return nil
  30. }
  31. func main(){
  32. //rpc 注册
  33. rpc.Register(&Calc{})
  34. rpc.Register(&AAA{})
  35. //启动监听
  36. listener,_:=net.Listen("tcp","0.0.0.0:8888")
  37. rpc.Accept(listener) //使用rpc的Accept
  38. listenner.Close()
  39. }

客户端

  1. package main
  2. import(
  3. "fmt"
  4. "net/rpc"
  5. )
  6. //将服务器端顶底请求、响应结构体拷贝过来
  7. // 定义rpc请求
  8. type AddRequest struct{
  9. Left int
  10. Right int
  11. }
  12. //定义rpc响应
  13. type AddResponse Struct{
  14. Result int
  15. }
  16. func main(){
  17. client,err:=rpc.Dial("tcp","127.0.0.1:8888") //使用rpc.Dial来发起一个连接
  18. if err!=nil{
  19. fmt.Println(err)
  20. return
  21. }
  22. //实现调用
  23. req:=AddRequest{2,3}
  24. resp:=AddResponse{}
  25. //调用
  26. err=client.Call("Calc.Add",req,&resp) //Calc.Add表示调用服务器端 Calc.Add
  27. fmt.Println(err,resp)
  28. client.Close()
  29. }
文档更新时间: 2021-09-15 14:28   作者:张尚