Html5学习笔记——Websocket

本文介绍了Websocket协议的基础概念,包括其如何与传统Http协议的区别、握手过程及如何解决客户端与服务器间消息同步的问题。文中还对比了轮询与长轮询的方式,并详细解释了Websocket如何实现服务器主动推送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Websocket是Html5出来的一个新协议,但它还是依附于Http协议。在传统的Http协议中,请求都是由客户端发起的,而且一个请求对应一个服务器的回应,对于客户端来说发出的请求=收到的回应。Websocket允许服务器主动向客户端推送消息。

Websocket的握手

在客户端发出的Websocket请求中,有一些字段是不同于传统的Http协议字段的,这些字段就告诉服务器,我要发起Websocket连接了。

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket                            (Websocket)
Connection: Upgrade                           (Websocket)
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==   (Websocket)
Sec-WebSocket-Protocol: chat, superchat       (Websocket)
Sec-WebSocket-Version: 13                     (Websocket)
Origin: http://example.com

然后服务器会发送回应,状态码变成101,表示协议从Http切换到Websocket。

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

Websocket解决了之前的哪些问题

在Websocket出现之前,客户端要保持与服务器的消息同步有两种方式:轮询长轮询
在轮询方式中,客户端发起ajax请求,服务器接收到请求,立马开始回应,不管有没有产生客户端想要的数据。这种方式比较浪费宽带、服务器资源。
在长轮询方式中,客户端发起ajax请求,服务器接收到请求,不急着回应,而是看看有没有客户端想要的数据,若有,就回应;若没有,连接就保持着直到有数据。这种方式需要服务器有一定的并发能力。
(从形状上看,轮询倒一下就很像长轮询)


1144907-20170503231635367-924320786.jpg

【Reference】

  1. 知乎 https://www.zhihu.com/question/20215561

转载于:https://www.cnblogs.com/season-peng/p/6804819.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值