# Computer Networking
How computers(hosts) communicate with each other.
## HTTP
HyperText Transfer Protocol
应用层(Application Layers)协议,基于Client - Server Model;
当你在浏览器输入一个网址时,实际上是向服务器发送了一个 HTTP 请求,服务器会响应并返回相关的内容,通常是 HTML 页面。
## HTTP Version 1.0
HTTP初级版本。它**每次创建连接只能处理一个请求**,处理完后就关闭连接,这意味着为每个 Web 元素(如图片、CSS、JS等)都需要重新建立一个连接,效率较低。
* 每个新连接都需要一个三次握手的过程来建立
## HTTP Version 1.1
HTTP Version 1.1 相较于 1.0,1.1 带来了许多改进。它支持持久连接(Persistent Connection),可以在同一个连接上处理多个请求/响应,这大大提高了加载速度。
## HTTP Version 2.0
给HTTP进行了彻底的优化,支持多路复用(Multiplexing),单个连接可以用于同时传输多个请求和响应消息
## grpc
gRPC is a modern open source high performance Remote Procedure Call (RPC) framework that can run in any environment.
g stands for Google.
RPC: 一个计算机上调用另一计算机上的过程(或函数),就像调用本地过程一样,而不必直接与网络底层细节交互。
作用:
* RPC允许微服务之间以高效、结构化的方式进行通信,每个服务可以使用最合适的语言和技术栈来开发。
* 与传统的HTTP RESTful通信相比,某些RPC协议(如gRPC)使用的是更紧凑、更快速的数据序列化方法(如Protocol Buffers)。
**以Twitter来举例**
1. 服务间通信(Service-to-Service):
* 微服务间的通信要求高效、低延迟,因此RPC,特别是像gRPC这样的解决方案,是一个很好的选择。gRPC支持多种语言,可以实现高性能的通信,并支持HTTP/2的特性如多路复用和双向流。
* 例如,当用户发送一条新的推文时,前端服务可能需要与后台的存储服务、通知服务、时间线服务等进行通信,这些都可以通过gRPC实现。
2. 外部API(对开发者和公众):
* 提供RESTful API是有意义的,因为它是开发者熟悉的,并且容易在各种客户端、语言和平台上使用。例如,Twitter为第三方开发者提供的API允许他们创建应用、获取推文或执行其他操作,这些通常是RESTful的。
3. 与前端的通信:
* 与Web前端(浏览器)的通信通常更适合使用RESTful或GraphQL,因为这些技术与现代Web技术栈(如JavaScript、React、Vue等)更为相容。
## Protobuf (Protocol Buffers)
Google开发的一种数据序列化协议