从RPC到HTTP:网络通信协议的演变

开发 前端
gRPC是Google​发布的基于HTTP 2.0​传输层协议承载的高性能开源软件框架,提供了支持多种编程语言的、对网络设备进行配置和纳管的方法。

前言

随着信息技术的飞速发展,网络通信协议在构建分布式系统和应用程序中发挥着至关重要的作用。从早期的远程过程调用(RPC)到现代的超文本传输协议(HTTP),网络通信协议经历了显著的演变。

在刚开始C/S架构流行时,对于C/S架构下的软件,如聊天软件、办公软件等,它们只需要与自己公司的服务器通信,所以可以使用自家定制的RPC协议进行远程调用即可。但随着万维网与B/S架构的出现,浏览器产生了,而浏览器需要访问来自不同公司的很多网站,这不能通过RPC进行访问,所以需要一个统一的标准来与这些网站服务器通信。

这时HTTP协议发挥作用的地方,HTTP为B/S架构(浏览器/服务器架构)提供了一个统一的标准,让不同网站的服务器能够与浏览器交互,HTTP也是RPC的一种实现方式。

图片图片

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket ,套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

图片图片

在Web应用中,浏览器请求一个URL,服务器就把生成的HTML网页发送给浏览器,而浏览器和服务器之间的传输协议是HTTP。

介绍

图片图片

RPC

RPC(Remote Procedure Call:远程过程调用):是一种进程间通信方式,是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

RPC基于TCP协议,客服端与服务端需要进行三次握手完成可靠连接,第四步进行数据传输。因为TCP是数据传输层,传输协议需要服务器统一编写,进行二进制传输,依赖序列化和反序列化规则,对于大部分应用需要灵活变动数据则不适用,RPC常用于Socket连接或一些基本不变动的传输格式数据,减少数据变动带来的开发成本。

比如说现在有两台服务器A和B,一个应用部署在A服务器上,另一个应用部署在B服务器上,如果A应用想要调用B应用提供的方法,由于他们不在一台机器下,也就是说它们不在一个JVM内存空间中,是无法直接调用的,需要通过网络进行调用,那这个调用过程就叫做RPC。

  • 由于HTTP在应用层中完成,整个通信的代价较高,远程过程调用中直接基于TCP进行远程调用,数据传输在传输层TCP层完成,更适合对效率要求比较高的场景,RPC主要依赖于客户端和服务端之间建立Socket链接进行,底层实现比REST更复杂。
  • 无论是何种类型的数据,最终都需要序列化转换成二进制流在网络上进行传输,数据的发送方需要将对象序列化转换为二进制流,而数据的接收方则需要把二进制流反序列化为对象.

HTTP

HTTP(Hypertext Transfer Protocol:超文本传输协议):是互联网上应用最为广泛的一种应用层协议,主要用于分布式、协作式和超媒体信息系统的应用,如万维网(WWW),客户端发起请求,服务器处理请求并返回响应,通常用于web浏览器和web服务器间的通信,HTTP定义了请求报文和响应报文的结构以及不同的请求方法(GET, POST等)

图片图片

补充

HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)

图片图片


gRPC是Google发布的基于HTTP 2.0传输层协议承载的高性能开源软件框架,提供了支持多种编程语言的、对网络设备进行配置和纳管的方法。

图片图片

责任编辑:武晓燕 来源: 一安未来
相关推荐

2019-04-29 10:26:49

TCP网络协议网络通信

2010-06-09 11:31:55

网络通信协议

2010-06-14 19:13:28

网络通信协议

2010-06-09 11:57:42

网络通信协议

2021-08-13 11:27:25

网络通信数据

2010-07-01 15:45:22

网络通信协议

2024-02-20 19:53:57

网络通信协议

2010-06-09 12:20:34

网络通信协议层

2021-03-04 09:50:23

Redis网络通信Redis服务器

2010-06-12 16:34:57

网络通信协议

2010-06-12 16:51:54

计算机网络通信协议

2023-11-04 09:06:11

2019-09-25 08:25:49

RPC网络通信

2023-10-12 19:37:50

通信协议HTTP

2010-06-11 14:31:08

通信协议

2022-12-02 14:42:37

2009-04-20 11:12:54

共享协议网络故障

2010-06-09 10:43:54

广义网协议

2010-06-25 14:43:46

通信协议

2010-06-11 14:25:08

通信协议
点赞
收藏

51CTO技术栈公众号