go原生rpc包的使用:传递数据的载体:golang封装的http协议/tcp/jsonrpc

rpc是一种通信协议,也就是计算机之间的沟通方式,类比http,mysql等,计算机之间通信是网络连接,tcp/ip协议里一个网络连接包含五元组信息-协议-端口-ip,rpc通过在一个网络连接上设置stub,监控这个连接的rpc请求,一般情况rpc的server端绑定的stub的载体有:1.http协议上,监听所有的http连接(指定server端ip,协议,端口),所有通过http协议过来的连接,如果有rpc请求,都会被rpc的server端捕捉(当前前提是这个请求已经注册在了rpc-seveer中);2.tcp连接

rpc关注2方面内容:1.传输方式-服务端的载体-传递数据的协议-因为rpc是会话层的沟通方式,所以要考虑在传输的下层的哪一层绑定:是绑定了一个协议-基于http协议,还是绑定在了一个tcp连接上,2.服务端和客户端共同使用的-数据传输的格式:json/xml/protobuf   只要统一了数据传输格式,以及载体,就可以用客户端调用服务端的rpc服务,客户端不限语言。

JSON和protobuf是支持多语言的-即这些协议能够翻译成其他语言如java;golang官方的net/rpc库使用encoding/gob进行编解码,支持http和tcp协议的传输方式;


什么是RPC

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

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


golang中如何实现RPC

在golang中实现RPC非常简单,有封装好的官方库和一些第三方库提供支持。Go RPC可以利用tcp或http来传递数据,可以对要传递的数据使用多种类型的编解码方式。golang官方的net/rpc库使用encoding/gob进行编解码,支持tcphttp数据传输方式,由于其他语言不支持gob编解码方式,所以使用net/rpc库实现的RPC方法没办法进行跨语言调用。

golang官方还提供了net/rpc/jsonrpc库实现RPC方法,JSON RPC采用JSON进行数据编解码,因而支持跨语言调用。但目前的jsonrpc库是基于tcp协议实现的,暂时不支持使用http进行数据传输。

除了golang官方提供的rpc库,还有许多第三方库为在golang中实现RPC提供支持,大部分第三方rpc库的实现都是使用protobuf进行数据编解码,根据protobuf声明文件自动生成rpc方法定义与服务注册代码,在golang中可以很方便的进行rpc服务调用。

     rpc      rpc 包提供了一个方法来通过网络或者其他的I/O连接进入对象的外部方法.
          jsonrpc      jsonrpc 包使用了rpc的包实现了一个JSON-RPC的客户端解码器和服务端的解码器.

下面的例子演示一下如何使用golang官方的net/r

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值