美文网首页简书Go语言专栏
Go语言学习六:RPC 协议

Go语言学习六:RPC 协议

作者: 孙小兵 | 来源:发表于2019-02-16 11:19 被阅读240次

    什么是RPC

    远程过程调用(Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。 如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用。维基百科:远程过程调用

    用通俗易懂的语言描述就是:RPC允许跨机器、跨语言调用计算机程序方法。打个比方,我用go语言写了个获取用户信息的方法getUserInfo,并把go程序部署在阿里云服务器上面,现在我有一个部署在腾讯云上面的php项目,需要调用golang的getUserInfo方法获取用户信息,php跨机器调用go方法的过程就是RPC调用。

    直接上代码啦。。。

    服务端代码:
    rpc_server.go

    ----------------------------------------------------------------------------------

    package main

    /**

    golang官方的net/rpc库使用encoding/gob进行编解码,支持tcp或http数据传输方式,由于其他语言不支持gob编解码方式,

    所以使用net/rpc库实现的RPC方法没办法进行跨语言调用。

    golang官方还提供了net/rpc/jsonrpc库实现RPC方法,JSON RPC采用JSON进行数据编解码,因而支持跨语言调用。

    但目前的jsonrpc库是基于tcp协议实现的,暂时不支持使用http进行数据传输。

    Go RPC的函数只有符合下面的条件才能被远程访问,不然会被忽略,详细的要求如下:

    1 .函数必须是导出的(首字母大写)

    2.必须有两个导出类型的参数,

    3.第一个参数是接收的参数,第二个参数是返回给客- 户端的参数,第二个参数必须是指针类型的

    4 .函数还要有一个返回值error

    举个例子,正确的RPC函数格式如下:

    func (t *T) MethodName(argType T1, replyType *T2) error

    T、T1和T2类型必须能被encoding/gob包编解码。

    */

    客户端代码 
    rpc_client.go

    --------------------------------------------------------------------

    相关文章

      网友评论

        本文标题:Go语言学习六:RPC 协议

        本文链接:https://www.haomeiwen.com/subject/hrmmeqtx.html