WebSocket是什么原理?为什么能实现持久化连接?

网络 通信技术
为了更好的理解WebSocket,我们需要从HTTP开始说起。因为很多时候,大家都喜欢拿WebSocket和HTTP做比较。

[[396397]]

为了更好的理解WebSocket,我们需要从HTTP开始说起。因为很多时候,大家都喜欢拿WebSocket和HTTP做比较。

HTTP的生命周期,通过Request来界定,一个Request和一个Response,这次HTTP请求也就结束了。

在HTTP1.1中,允许发送多个Request和接收多个Response,但无论如何,Request永远等于Response。

很多网站为了实现实时的信息传递,都会使用轮询技术,轮询有两种,一种是ajax轮询,一种是长轮询(long poll)。

ajax轮询的原理很简单,让浏览器每隔几秒向服务器发送一次请求,询问服务器是否有新的信息。

客户端:有没有新信息,没有我等会再问(Request)

服务器:没有(Response)

客户端:有没有,没有我等会再问(Request)

服务器:没有(Response)

客户端:有没有新信息,没有我等会再问(Request)

服务器:有,发给你了(Response)

长轮询与ajax轮询相似,不同的是,当客户端发起请求后,如果没有消息,就一直不返回Response,直到有新消息为止。

客户端:有没有新信息,没有不要回我(Request)

……

服务器:现在有了,给你(Response)

以上两种方式,都在不断地建立HTTP连接,只有客户端发起请求时,服务端才能回应,服务端是不能主动发起的。

而且HTTP还是一个无状态协议,服务器不会保留与客户交易时的任何状态,这样做的好处是大大减轻了服务器的记忆负担,保持较快的响应速度。

不过因此也产生了一些问题。客户端要不断地发送HTTP请求,每次都要带上较长的头部,真正有效的数据可能很少,浪费很多带宽资源,也给服务器增加了压力。

好了,我们的主角WebSocket终于可以登场了。

相对HTTP来说,WebSocket是一种持久化的协议。它会基于HTTP协议,来完成一部分握手,之后就脱离HTTP,完全采用WebSocket了。

建立WebSocket连接的过程为:

  • 客户端发起HTTP请求,经过3次握手建立TCP连接,HTTP请求里存放WebSocket支持的版本号等信息。
  • 服务器收到客户端握手请求后,回馈数据。

以上两个步骤完成后,HTTP握手部分完成,协议升级为WebSocket,此时服务器就不再需要客户端发起请求,再响应请求了,可以主动推送信息给客户端了。

客户端:我要建立WebSocket协议。

服务器:好的,已经升级为WebSocket协议了。

客户端:有信息的时候,推送给我。

服务器:好的,有信息会推给你。

服务器:有信息了,给你。

服务器:又有信息了,给你。

……

只需经过一次HTTP请求,服务器就能源源不断地向客户端推送信息了!

从客户端主动询问,变成服务器主动推送,解决了服务器上资源消耗较多的问题。

以上便是WebSocket原理以及实现持久化连接的过程。

 

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2024-01-11 08:53:58

2009-06-01 15:12:05

JPA是什么对象持久化ORM

2018-02-07 00:00:00

数字化转型

2017-07-11 13:58:10

WebSocket

2019-11-27 09:03:49

JavaScriptJavaCSS

2009-06-25 16:07:30

JPAJava EE

2024-09-04 10:44:19

2022-07-08 08:37:23

Nacos服务注册动态配置

2018-08-02 15:24:05

RPCJava微服务

2024-07-15 08:20:24

2024-06-06 08:53:13

动态链接库共享库

2022-02-25 14:11:48

短网址Java算法

2022-10-08 00:00:00

websocket协议HTTP

2023-07-21 10:55:27

2023-11-10 08:03:00

2017-04-14 10:11:37

闪存备份用例

2024-06-05 09:26:07

2015-07-23 09:20:19

mmap

2024-01-09 13:43:05

CMSCRM

2023-04-04 07:15:01

点赞
收藏

51CTO技术栈公众号