Go RPC 入门指南:RPC 的使用边界在哪里?如何实现跨语言调用?
什么是 RPC
RPC 的中文是“远程过程调用”,对应的英文全称是:Remote Procedure Call,可以简单理解为一个节点请求另一个节点提供的服务
理解“本地过程调用”可以更好的理解“远程过程调用”
知识点:RPC 主要依赖于客户端与服务端建立 socket 链接;而 HTTP RESTful 实现通讯的代价比较高,这是 RPC 的一个优势体现。
为什么用 RPC
就是因为无法在同一个进程内,或者无法在同一个服务器上通过本地调用的方式实现我们的需求。HTTP 能满足需求但是不够高效,所以我们需要使用 RPC。
RPC 的优势
RPC 能够跨多种开发工具和平台
RPC 能够跨语言调用
RPC 能够提高系统的可扩展性,解耦,提高复用
RPC 相较于 HTTP,传输效率更高,性能消耗更小,自带负载均衡策略,自动实现服务治理
RPC 和 HTTP 对比
RPC 主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。
HTTP 主要用于对外的异构环境,浏览器接口调用,APP 接口调用,第三方接口调用等。
RPC 的使用边界
通过和 HTTP 的对比,我们倒推出 RPC 的边界:对外的异构环境,浏览器接口调用,APP 接口调用,第三方接口调用。
上述这些都不适合 RPC,不知道 RPC 不适合做什么,比知道 RPC 能做什么更重要。
RPC 入门 1:net/rpc
基本构成
RPC 的基本构成:服务端,客户端
服务端基本构成:结构体,请求结构体,响应结构体
客户端基本构成:请求结构体,响应结构体
代码示例
rpc_service.go
rpc_client.go
运行结果
先启动服务端,再启动客户端连接服务端
RPC 入门 2:net/rpc/jsonrpc
实现跨语言调用
jsonrpc_server.go
jsonrpc_client.go
运行结果
先启动服务端,再启动客户端连接服务端
RPC 入门 3:go php 跨语言调用
Go 作为服务端,PHP 作为客户端
jsonrpc_server.go:和入门 2 服务端的代码一样
jsonrpc_client.php
运行结果
参考博客
名词解释
Thrift:是一种接口描述语言和二进制通讯协议,被当做 RPC 的框架来使用。
思考
如何优雅的使用 RPC 进行 web 开发
会在下一个博客中整理分享
一起学习,升级打怪
我们搞了一个对学 Go 真正有帮助的群,欢迎加入:
公众号:程序员升级打怪之旅
微信号:wangzhongyang1993
版权声明: 本文为 InfoQ 作者【王中阳Go】的原创文章。
原文链接:【http://xie.infoq.cn/article/0c767d1d9182ec748e10ead05】。文章转载请联系作者。
评论 (1 条评论)