首先,我们探讨一下什么是?RPC。RPC,缩写为 Remote Procedure Call Protocol,直译来看就是远程过程调用协议。
讲得通俗一些:
官方的定义可能会这样解释:它是一种协议,可以使程序能在网络上请求远程计算机上的服务,而无须关心底层网络技术细节。
RPC 的构架可以分为三个层次:
下面的示意图说明了典型的开发情景:前端代码调用后端服务
RPC 的设计解决了几个关键问题:
两个经典的应用示例包括:
从调用到结果接收,RPC 的过程概述如下:
RPC 和 HTTP 对比不完全是同等级别的比较,更恰当的是将 RPC 和 "HTTP +?RestFul" 放在一起对比。
RPC 不限于?HTTP,它还可以选择 TCP 进行传输,而 HTTP 只工作在自身的协议之上。
RPC 包含了 HTTP2 的特性,使得它在传输效率上优于标准的 HTTP1。
得益于 HTTP2 的特性(如二进制传输、头部压缩等),RPC 在性能上的消耗相较于 HTTP1 会更低。
大多数 RPC 框架自带负载均衡策略,而传统的?HTTP?方案则通常需要通过 Nginx/HAProxy 等工具实现。
RPC?框架?能实现自动通知和服务调整,而 HTTP 则往往需要手动通知和修改配置。
简单来说,gRPC?是一个开源的RPC框架,它建立在 HTTP2 的基础设施之上,因而自然具备了HTTP2 的一系列优势:
如下图所示,通过 gRPC 进行远程服务调用时,客户端(client)仅需 gRPC 存根,通过 Proto Request 请求 gRPC 服务器,服务器则通过 Proto Response(s) 返回结果。
JSON-RPC 是一种简洁的使用JSON格式数据的RPC传输协议,它通过HTTP进行通信。Postman 是API开发中常用的工具,能够轻松实现 JSON-RPC 接口的测试与使用。
Apifox?提供基于 .proto 文件的 gRPC 接口调试功能,支持包含一元调用和流式调用。项目创建时,选择「gRPC项目」并导入 .proto 文件,即可开始调试,无需编写额外代码。
导入 .proto 文件之前,需要确认是否有其他依赖的.proto文件,并添加相应的依赖路径。
通过将 gRPC URL 填入地址栏并点击「调用」按钮,即可实现一元调用。
流式调用包括服务端流、客户端流和双向流。调用成功后,用户可以在消息标签区编写并发送消息。Apifox 展示了时间线视图,按顺序分布显示调用状态、发送的消息和收到的消息。点击具体消息可以方便地查看详细信息。
知识扩展: