Golang RPC功能

版权声明:本文为博主原创文章,如果转载请注明,谢谢。 https://blog.csdn.net/baijiwei/article/details/82527069

RPC框架在分布式系统中, 尤其是大型系统, 应用非常广泛, 它相对于http的系统调用更为效率高。本文主要介绍如何使用RPC以及golang 中的gorpc的使用。

什么是RPC?

RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。

RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

常见的RPC架构 (来自于: https://www.cs.rutgers.edu/~pxk/417/notes/03-rpc.html):
这里写图片描述

  1. 客户端函数向 client stub发送请求;
  2. client Stub调用本地socket进行数据传送;
  3. 从client端到server端网络间socket数据传输;
  4. Server端socket数据传送到server stub;
  5. server端调用函数进行服务处理;
  6. server端处理的结果发送到server stub;
  7. Server stub将响应数据调用系统sockert;
  8. 从server到client的scoket数据传输;
  9. client端scoket到client stub数据传送;
  10. client stub到client调用端的数据接收;

    gorpc

    golang 的官方代码库里面, 默认带了”net/rpc”代码库, 它封装了RPC框架, 能够使我们很容易创建、使用RPC功能。

golang语言对RPC的支持有以下要求:

  • 以对象形式注册RPC;

  • RPC函数必须是对象的公共函数,也就是首字母大写的函数;

  • RPC函数必须有2个参数,类型为公共类型,或go内嵌类型;

  • RPC函数第2个参数作为返回值,必须是指针类型;

  • RPC函数必须返回一个error类型的值;

    RPC 注册函数的格式如下:
    func (t *T) MethodName(argType T1, replyType *T2) error
    第一个参数代表调用者(client)提供的参数;
    第二个参数代表要返回给调用者的计算结果;

RPC底层的协议可以使用http或者 tcp, 也可以按照json encoding方式传递数据,如下链接里面有3种情况很好的例子:
https://www.cnblogs.com/jkko123/p/7039675.html

除非显示的设置codec,否则这个库默认使用包encoding/gob作为序列化框架。
如果要实现自定义的数据传入接收, RPC定义了如下的接口:

type ClientCodec interface {
    WriteRequest(*Request, interface{}) error
    ReadResponseHeader(*Response) error
    ReadResponseBody(interface{}) error

    Close() error
}

猜你喜欢

转载自blog.csdn.net/baijiwei/article/details/82527069
今日推荐