继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

WebSocket(长链接)

www说
关注TA
已关注
手记 302
粉丝 83
获赞 493

一、WebSocket 定义

WebSocket 是一种标准协议,用于在客户端和服务端之间进行双向数据传输。

但它跟 HTTP 没什么关系,它是基于 TCP 的一种独立实现。

WebSocket的出现,使得浏览器具备了实时双向通信的能力。

HTTP 协议有一个缺陷:通信只能由客户端发起。

WebSocket优点:支持双向通信,更灵活,更高效,可扩展性更好。

二、以前客户端如何处理服务端的进度

1、Ajax 轮询

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

ajax轮询 需要服务器有很快的处理速度和资源。(速度)

2、 long poll 的方式

原理跟 ajax轮询 差不多,都是采用轮询的方式,不过采取的是阻塞模型(一直打电话,没收到就不挂电话)

long poll 需要有很高的并发,也就是说同时接待客户的能力。(场地大小)

三、WebSocket 解决了 HTTP 的这几个难题。当服务器完成协议升级后( HTTP -> WebSocket )

1、服务端可以主动推送信息给客户端,解决了轮询造成的同步延迟问题。

2、由于 WebSocket 只需要一次 HTTP 握手,服务端就能一直与客户端保持通信,直到关闭连接,这样就解决了服务器需要反复解析 HTTP 协议,减少了资源的开销。

webp

WebSockets

四、主流浏览器对 WebSocket 的支持情况比较好(不兼容低版本 IE,IE 10 以下)

webp

WebSocket浏览器

五、这些需求可以考虑使用 WebSocket:

1、多个用户之间进行交互;

2、需要频繁地向服务端请求更新数据。

比如弹幕、消息订阅、多玩家游戏、协同编辑、股票基金实时报价、视频会议、在线教育等需要高实时的场景。

六、websocket 请求报文

1) 客户端请求报文:

重点请求首部意义如下:

Connection: Upgrade:表示要升级协议
Upgrade: websocket:表示要升级到websocket协议。

Sec-WebSocket-Version: 13:表示websocket的版本。如果服务端不支持该版本,需要返回一个Sec-WebSocket-Versionheader,里面包含服务端支持的版本号。

Sec-WebSocket-Key:与后面服务端响应首部的Sec-WebSocket-Accept是配套的,提供基本的防护,比如恶意的连接,或者无意的连接。

例如:
Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==
Sec-WebSocket-Version: 13
Upgrade: websocket
Connection: Upgrade

这个就是Websocket的核心了,告诉 Apache 、 Nginx 等服务器

2) 服务端响应报文 Header

服务端返回内容如下,状态代码101表示协议切换。到此完成协议升级,后续的数据交互都按照新的协议来。

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

说明:
101 状态码表示服务器已经理解了客户端的请求,并将通过 Upgrade 消息头通知客户端采用不同的协议来完成这个请求;

Sec-WebSocket-Accept 这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key;
Sec-WebSocket-Protocol 则是表示最终使用的协议。



作者:枫之伊信
链接:https://www.jianshu.com/p/8667c85f68e1


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP