美文网首页
WebSocket解析

WebSocket解析

作者: 刺客的幻影 | 来源:发表于2018-08-09 16:25 被阅读0次
image.png

1. WebSocket是什么?

WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

简单的说,WebSocket和HTTP一样也是基于TCP/IP的应用层协议,与HTTP最大的区别是其为双向的,可以由服务端向客户端主动推送消息

2. 为什么会有WebSocket协议?

因为HTTP虽然可以通过keep-alive和服务端保持长连接,但是只能通过客户端单向地向服务端发起请求,如果想实时获取服务端最新数据,一般都会轮询。可是轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开,而HTTP请求的头部数据是很多的)。而使用websocket就不会存在这样的问题。

3. 与HTTP的区别

传统HTTP与服务端的交互模式如下:

image.png
WebSocket与服务端的交互模式如下:
image.png

上图对比可以看出,相对于传统HTTP每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket是类似Socket的TCP长连接通讯模式。一旦WebSocket连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket连接或Server端中断连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实时性优势明显。

相比HTTP,WebSocket有以下优点:

  • 是真正的全双工方式,建立连接后客户端与服务器端是完全平等的,可以互相主动请求。而HTTP长连接基于HTTP,是传统的客户端对服务器发起请求的模式。

  • HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换效率很低。Websocket协议通过第一个request建立了TCP连接之后,之后交换的数据都不需要发送 HTTP header就能交换数据,这显然和原有的HTTP协议有区别所以它需要对服务器和客户端都进行升级才能实现(主流浏览器都已支持HTML5)。此外还有 multiplexing、不同的URL可以复用同一个WebSocket连接等功能。这些都是HTTP长连接不能做到的。

4. WebSocket握手报文分析

  • 握手 请求
    为了实现WebSocket通信,需要用到HTTP的Upgrade的首部字段,告知服务器通信协议发生改变,以达到握手的目的。
GET /chat  HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
Origin: http://localhost:8080
Sec-WebSocket-Version: 13

Sec-WebSocket-Key字段内记录这握手过程中必不可少的键值。Sec-WebSocket-Protocol字段内记录使用的子协议。子协议按WebSocket协议标准在连接分开使用时,定义那些连接的名称 。

  • 握手 响应
    对于之前的请求,返回状态码101 Switching Protocols的响应。
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=

Sec-WebSocket-Accept的字段值是由握手请求中的Sec-WebSocket-Key的字段值生成的。成功握手确立WebSocket连接之后,通信时不再使用HTTP的数据帧,而采用WebSocket独立的数据帧。

参考文档:
https://cloud.tencent.com/document/product/214/4150
http://www.ruanyifeng.com/blog/2017/05/websocket.html

相关文章

  • Nginx 配置WSS 解析与实战

    Nginx 配置WSS 解析与实战 1. 几个关键概念 1.1 WebSocket WebSocket 协议是 h...

  • WebSocket解析

    1. WebSocket是什么? WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSock...

  • websocket 解析

    websocket:WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-...

  • websocket

    websocket深入探究不过语言不是php.目前解析数据帧还有些问题~

  • Websocket 协议解析

    原文在:http://www.king-liu.net, 欢迎大家来 WebSocket protocol 是HT...

  • WebSocket协议解析

    现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是指在特定的时间间隔(如每一秒),由浏览器对服务器发起HT...

  • WebSocket 语法解析

    WebSocket

  • 快速入门SpringMVC

    体系概述 注解驱动的控制器 处理方法的数据绑定 视图和视图解析器 本地化解析 文件上传 webSocket支持 杂...

  • WebSocket 经典解析(转)

    作者:Ovear 链接:https://www.zhihu.com/question/20215561/answe...

  • 杂图

    来自网络图片: DNS域名解析过程: 前端优化性能的几个点: OSI、tcp/ip、websocket、socke...

网友评论

      本文标题:WebSocket解析

      本文链接:https://www.haomeiwen.com/subject/lphcbftx.html