三种Web通信技术之间的差异

发布者:埃文科技
发布于:2023-03-31 12:09

在网络应用的快速发展中,新型的通信协议不断涌现,而 WebSocket、gRPC 和 QUIC 都是现代网络通信技术中的重要协议和技术,在不同的应用场景中,它们之间存在着一定的相同和差异。接下来我们就以这三种技术的特点、差异和应用场景进行分析说明。

什么是WebSocket?

WebSocket 是一种基于 HTTP 的协议,是HTML5研究小组在2011年提出的一个协议规范,主要用于实现双向通信。在WebSocket中,客户端和服务器可以建立一条持久化的连接,通过这条连接可以实现双向通信。

WebSocket 是应用层第七层上的一个应用层协议,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。也就是说WebSocket 分为握手和数据传输阶段(HTTP握手 + 双工的TCP连接),还有最后关闭连接阶段,如下图:



有以下特点

建立在 TCP 协议之上

(它需要通过握手连接之后才能通信,服务器端的实现比较容易)

双向通信

(当建立通信连接,可以做到持久性的连接,服务器可以主动给客户端推送消息)

与 HTTP 协议有着良好的兼容性

(默认端口也是80或443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种代理服务器)

性能开销小,通信高效

(数据格式比较轻量,可以发送文本,也可以发送二进制数据)

没有同源限制

(客户端可以与任意服务器通信)

应用场景

聊天应用

在线游戏

协作编辑应用

股票交易应用

实时活动/数据流展示等

什么是gRPC?

gRPC是Google在2016推出的一个高性能轻量级RPC框架,它使用Protobuf作为接口描述语言,支持多种编程语言,如 C++, Java, Python 等。



gRPC是建立在TCP之上,工作模式有四种:

简单 RPC

(一般的rpc调用,client请求一次,server返回一次)

服务端流式 RPC

(client请求一次,server返回多次)

客户端流式 RPC

(client请求多次,server返回一次)

双向流式 RPC

(结合客户端流式和服务端流式,即双方可以流式互相通信)

对比传统的RPC,在响应返回之前时是不能继续发送请求的,而gRPC双向流模式可以同时互相通信,默认使用protobuf协议,比xml和json传输效率高10-20倍.

有以下特点

支持多种语言(跨语言编程)

性能高

(protobuf性能高过json, http2.0性能高过http1.1)

基于标准的 HTTP/2 设计

(支持双向流、消息头压缩、单TCP的多路复用、服务端推送等特性)

默认采用protobuf作为IDL

(接口描述语言)

序列化支持 protobuf

(protobuf是一种语言无关的高性能序列化框架,保障了RPC调用的高性能,传输效率高)

流式处理

(基于http2.0支持客户端流式,服务端流式,双向流式)

应用场景

微服务架构

可以用于构建微服务架构中的各个服务之间的通信,实现高效的服务调用。

多语言项目

其跨语言特性使得不同语言的项目可以通过gRPC进行通信,特别是当项目涉及多个不同语言的服务的时候。

云原生应用

可以与Kubernetes、Istio等云原生技术结合使用,实现服务的发现、负载均衡、容错等功能,从而更好地支持云原生应用的开发和部署。

什么是QUIC?

QUIC是谷歌在2016年制定的一种基于UDP的低时延的互联网传输层协议,旨在解决 TCP 协议存在的问题。QUIC 支持多路复用和快速握手,可以提高数据传输的效率和可靠性。

有以下特点

快速启动和快速恢复

QUIC可以在连接建立时立即启动数据传输,不需要等待握手完成,因此可以更快地建立连接和传输数据。

多路复用

可以在一个连接上同时传输多个数据流,提高网络利用率和数据传输效率。

安全性

内置TLS协议,支持端到端的加密传输,可以保护数据的机密性和完整性,防止网络中间人攻击和数据泄露。

连接保持

当客户端 IP 或者端口发生变化时,可以快速恢复连接,也就是从WiFi 切换到流量时用户无感知。

适应性

依据自适应算法并结合网络状况调整传输参数。例如调整窗口大小、重传超时等,以适应不同的网络环境和带宽情况。

有以下特点

实时通信和游戏

其快速启动和快速恢复的特点,使得它更适用于实时通信和游戏场景。

流媒体和视频服务

其多路复用和流量控制,适合用于流媒体和视频服务,提高数据传输效率和网络利用率。

网络安全

内置TLS协议,支持端到端的加密传输,可以保护数据的机密性和完整性,适合用于网络安全场景。


三者之间的差异对比



综 合 对 比



如何使用呢?

何时使用 WebSocket?

实时更新的功能及服务,其中通信是单向的,由服务器将最新更新的信息推送到客户端。如:警报和通知。

双向通信的功能及服务,客户端和服务器互相实时发送和接收消息。如:在线聊天、在线协作编辑文档。

一次向多个终端广播相同的消息,通常说法为发布/订阅消息传递方式。


何时使用 gRPC?

在微服务风格的系统框架中使用gRPC连接多语言服务。针对流式请求和流式响应的点对点实时服务。

何时使用QUIC?

短视频:提升首屏秒开率,降低卡顿率。

图片文件下载:降低文件下载总耗时。

直播:降低播放卡顿率,提升推流稳定性。


总 结

你要选择使用哪种协议将取决于你的特定需求。你的应用程序的应用场景和目标决定了你应该使用哪种协议。比如:双向通信的实时应用程序就最适合使用WebSocket,但它不太适合需要发送大量数据的应用程序。若应用服务间需要发送大量数据进行通信,那gRPC无疑是最好的选择。基本上,你需要确定您的应用程序开发目标是什么,侧重点是什么。

你可以尝试对自己问以下问题:

应用程序的目标是什么:安全还是质量?

应用程序开发目标是什么?

未来的目标是什么?

关注以上的几个问题的同时,然后决定为要研发的应用程序选择一个适合的通信技术。



声明:该文观点仅代表作者本人,转载请注明来自看雪