4.1 grpc是什么
gRPC是一个高性能、开源和通用的RCP框架,面向移动和HTTP/2设计
地址在grpc/grpc · GitHub
RPC是什么 Remote Procedure Call 远程过程调用,是一个通信协议。允许运行于一台pc的程序调用另一台pc的子程序,而程序员无需额外地为这个交互作用编程。 RPC是一个分布式计算机的cs的例子,它简单而又广受欢迎。RPC问题由client发出一个执行基于过程请求,并用client提供的参数。执行结果将返回给client。由于存在各样的变体和细节差异,对应的派生了各种RPC协议,而且它们并不互相兼容。 为了允许不同的client都能访问server,许多标准化的RPC系统应运而生了。其中大部分采用接口描述语言(Interface Description Language,IDL),方便跨平台的远程过程调用。 更多信息: https://waylau.com/remote-procedure-calls/
什么是 protocol buffer
一种结构化数据的数据存储格式(类似于XML/json)
- google 出品
- 版本:proto2 和proto3
优点
- 体积小
- 序列化速度快
- 传输速度快
- 使用简单,维护成本低
- 向后兼容
- 加密性好
- 跨平台
- 跨语言
- 可扩展性好
缺点
- 不适合基于广西的标记文档XML建模
- 通用性差(json/XML已经成为行业标准)
- 自解释性差(二进行存储,不可读)
一句话:protocolBuf 比XML、json更小、更快,使用与维护更简单
protobuf使用
- 编码/解码方式简单(只需要简单的数学运算=位移等)
- 采用PB 自身的框架代码和编译器共同完成
序列化后数据体积小(数据压缩效果好)的原因:
- 彩了独特的编码方式,如 Varint、Zigzag编码方式等
- 采用了
T-L-V
的数据存储方式;减少了分隔符的使用与数据存储得紧凑。
应用场景
- 数据存储
- 数据交换
4.2 什么是半开连接,半闭连接
TCP是一个全双工(full-duplex)协议,因此半字就是相对于全来说的。
- half-open(挂起) 不能正常正常传输数据
- half-close 可以在其中的一个方向中传输数据
半开连接
一方预计会发送一条消息,而另一方其他接收到它。中间网络发生故障;
- 接收方将继续等待消息到达。
- 接收方将发送其数据,并收到一个连接丢失的错误提示。
半开连接的原因
半开连接就是那些在测试环境中很少见到,但在现实世界中普遍发生的烦人的问题。这是因为如果套接字以正常的四次握手关闭(或者即使突然关闭),也不会发生半开问题。下面介绍一些半开连接的常见原因:
- 进程崩溃
- 电脑死机
- 路由崩溃/重启
- 拔掉网络
- 无线设备
半闭连接
当一方对期socket执行关闭操作时,仅关闭发送(传出)流。
什么是长连接, 短连接?
那就是一直认为,HTTP连接分为长连接和短连接,而我们现在常用的都是HTTP1.1,因此我们用的都是长连接。
这句话其实只对了一半,我们现如今的HTTP协议,大部分都是1.1的,因此我们平时用的基本上都是长连接。但是前半句是不对的,HTTP协议根本没有长短连接这一说,也正因为误解了这个,导致对于长连接一直不明不白,始终不得其要领,具体下面一段会说到。
网络上很多文章都是误人子弟,根本没有说明白这个概念。这里要强调一下,HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP连接就结束了,或者更准确的说,是本次HTTP请求就结束了,根本没有长连接这一说。那么自然也就没有短连接这一说了。
之所以网络上说HTTP分为长连接和短连接,其实本质上是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说。