golang RPC简单使用

RPC入门使用

  • 服务端

    1. 注册rpc服务对象。给对象绑定方法(定义类、绑定类方法)

      rpc.RegisterName("服务名",回调对象)
      
    2. 创建一个监听器

      listener,err := net.Listen()
      
    3. 建立连接

      conn,err := listener.Accept()
      
    4. 将连接绑定rpc

      rpc.ServeConn(conn)
      
  • 客户端

    1. 用rpc连接服务器

      conn,err := rpc.Dial()
      
    2. 调用远程函数

      conn.Call("服务名.方法名",传入参数,传出参数)
      
  • 案例

    • server.go

      //server.go
      package main
      
      import (
      	"fmt"
      	"net"
      	"net/rpc"
      )
      
      //定义类对象
      type World struct {
      
      }
      //绑定类方法
      func (this *World)HelloWorld(name string, resp *string) error {
      	*resp = name + "你好"
      	return nil
      }
      func main() {
      	//注册rpc服务,绑定对象方法
      	err := rpc.RegisterName("hello", new(World))
      	if err != nil {
      		fmt.Println("注册rpc服务失败!:",err)
      		return
      	}
      	//设置监听
      	listener, err := net.Listen("tcp", "127.0.0.1:8080")
      	if err != nil {
      		fmt.Println("设置监听失败!:",err)
      		return
      	}
      	fmt.Println("开始监听")
      	defer listener.Close()
      	//建立连接
      	conn, err := listener.Accept()
      	if err != nil {
      		fmt.Println("建立连接失败!:",err)
      		return
      	}
      	fmt.Println("连接建立成功")
      	defer conn.Close()
      	//绑定服务
      	rpc.ServeConn(conn)
      }
      
    • client.go

      //client.go
      package main
      
      import (
      	"fmt"
      	"net/rpc"
      )
      
      func main()  {
      	//用rpc连接服务器
      	conn, err := rpc.Dial("tcp", "127.0.0.1:8080")
      	if err != nil {
      		fmt.Println("远程连接rpc失败:", err)
      		return
      	}
      	defer conn.Close()
      	//调用远程函数
      	var reply string
      	err = conn.Call("hello.HelloWorld", "李白", &reply)
      	if err != nil {
      		fmt.Println("调用远程方法失败:", err)
      		return
      	}
      	fmt.Println(reply)
      
      }
      

JSONRPC

  • 由于rpc使用go语言特有的数据序列化gob,其他语言乱码

  • 修改客户端

    conn, err := jsonrpc.Dial("tcp", "127.0.0.1:8080")
    
  • 修改服务器

    jsonrpc.ServeConn(conn)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值