IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【GRPC】grpc -> 正文阅读

[网络协议]【GRPC】grpc

gRPC是什么

gRPC是谷歌的开源RPC框架,诞生的目的是为了帮助不同编程语言的软件系统之间能够使用相同的服务。客户端和服务端只需要拥有相同的proto文件(也叫做存根),就能使用protobuf工具生成对应语言的grpc方法文件。

gRPC使用的哪种通信协议,与其他相比优点在哪?

gRPC使用HTTP2协议,拥有HTTP2的特性

  1. 使用二进制帧

    1. 高性能和健壮性
    2. 更轻量级的传输、解码更安全等特性
  • 因为它是二进制的,它也能很好地契合protocol buffer格式,使得传输更加方便。
  • HTTP2在头部使用HPACK压缩,也大大地减少了传输中的开销,提高传输性能。
  1. HTTP2的多路复用特性,使得gRPC可以保证客户端和服务器在同一个TCP连接中进行多次请求和响应,很有效的减少网络延迟和提高网络利用率
  2. 允许服务器主动推送资源也是HTTP2赋予gRPC的一大特性,服务端明确知道客户端的需求,客户端只需发送一次请求,服务端就将所需的资源一并发送给客户端,减少交互产生的网络IO和延迟

关于HTTP2,可查看这篇文档HTTP

什么是protobuf

protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。

Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。

你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏由旧数据结构编译的已部署程序。

简单来讲, ProtoBuf 是结构数据序列化方法,可简单类比于 XML,其具有以下特点:

  • 语言无关、平台无关。即 ProtoBuf 支持 Java、C++、Python 等多种语言,支持多个平台
  • 高效。即比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单
  • 扩展性、兼容性好。你可以更新数据结构,而不影响和破坏原有的旧程序

相较于XML和JSON,protobuf的数据结构化,可读性要弱一些,但是数据序列化更强大(为什么更强大可以参考深入 ProtoBuf - 编码了解 ProtoBuf 是如何极尽所能的压榨每一寸空间和性能,其中的编码原理正是 ProtoBuf 的关键所在)。

protobuf的应用场景明确性强(跨平台的RPC数据传输),xml和json的应用场景更加丰富(web接口等数据,便于阅读)

HTTP和RPC有什么区别,相同之处

这个问题在知乎上被讨论的很激烈,当中有一个回答我觉得是比较合理的,如果读这篇博客的同学有另外的看法,可以到知乎上去分享一下

1572430666100.jpeg

从历史角度来看:

RPC在1984年就被拿来做分布式系统的通信,而HTTP在1990年才开始作为主流协议出现,并且HTTP的应用场景是在web领域,而不是分布式系统之间的通信,这样导致在很长一段时间内HTTP都是浏览器程序和后端web系统之间通信的的东西,传输的都是啰嗦的HTML,当AJAX和JSON成为主流,HTTP才摆脱了HTML用上了JSON。后面restful思潮兴起,HTTP也就成为了浏览器程序的首选,因为都是在内网中走,系统之间的调用在性能上要求不高,这时的HTTP也恰好满足这个条件,维护成本也低。

从技术角度来看:

这俩不是一个平行的概念,rpc是远程调用,http是传输协议。rpc是对底层的封装,可以很好的帮助调用远程服务器上的方法。rpc既可以在tcp上构建,也可以在http上构建。更多的是接口的封装与使用友好性. 基于http的rpc在传输层使用文本协议.基于tcp的rpc传输层是二进制协议.

顺带贴一个使用grpc实现的客户端服务端demo

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 19:06:09  更:2022-03-30 19:10:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:02:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码