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使用

  • 描述语言
  • 编译
  • 类库

    序列化原理解析:

    序列化的本质:对数据进行编码+存储
    protocolBuf的性能好,主要是因为 序列化速度快序列化后的数据体积小,其原因如下:
    序列化速度的原因:
  1. 编码/解码方式简单(只需要简单的数学运算=位移等)
  2. 采用PB 自身的框架代码和编译器共同完成

序列化后数据体积小(数据压缩效果好)的原因:

  1. 彩了独特的编码方式,如 Varint、Zigzag编码方式等
  2. 采用了 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连接才有真正的长连接和短连接这一说。