摘抄并用于自查html
1. WebSocket 与 HTTPweb
websocket 协议在 2008 年诞生,2011年成为国际标准。如今全部浏览器都已经支持了。Websocket 的最大特色是,服务器能够主动向客户端推送消息,客户端也能够主动向服务器发送消息,是真正的双向平等对话。ajax
HTTP 有 1.1 和 1.0 只说,也就是所谓的 keep-alive,把多个 HTTP 请求合并为一个,可是 Websocket 实际上是一个新协议,跟 HTTP 协议基本没有关系,只是为了兼容现有浏览器,因此在握手阶段使用了 HTTP。浏览器
下面偷一张图说明 HTTP 和 Websocket 的主要区别:服务器
Websocket 的其余特色:websocket
2. WebSocket 是什么样的协议,具体有什么优势并发
首先,WebSocket 是一个持久化的协议,相对于 HTTP 这种非持久的协议来讲。socket
HTTP 的生命周期经过 Request 来界定,也就是一个 Request 一个 Response,那么在 HTTP1.0 中,此次 HTTP 请求就结束了。性能
在 HTTP1.1 中有改进,使得有一个 keep-alive,也就是说,在一个 HTTP 链接中,能够发送多个 Request,接收多个 Response。可是,Request = Response,在 HTTP 中永远是一个 Request 对应一个 Response。并且这个 Response 也是被动的,不能主动发起。加密
WebSocket 是基于 HTTP 协议,借用 HTTP 协议完成一部分握手。
下面一个典型的 WebSocket 握手
GET /chat HTTP/1.1
Host: server.xxx.com
Upgrade:websocket
Connection:Upgrade
Sec-WebSocket-Key: xxxxxxx
Sec-WebSocket-Protacal:chat, superchat
Sec-WebSocket-Version:13
Origin: http://xxx.com
这段相比 HTTP 协议的握手请求,多了 Upgrade 和 Connection。这个就是 WebSocket 的核心了,告诉 Apache、Nginx 等服务器:我发起的请求要用 WebSocket 协议,须要对应的处理。
Sec-WebSocket-Key: xxxx
Sec-WebSocket-Protocol:chat, superchat
Sec-WebSocket-Version:13
首先,Sec-WebSocket-Key 是一个 Base64 encode 的值,这个是浏览器随机生成的,验证是不是能够处理 WebSocket 服务的。
而后, Sec-WebSocket-Protocol 是一个用户自定义的字符串,用来区分同 URL 下,不一样的服务所须要的协议。
最后,Sec-WebSocket-Version 是高速服务器所使用的 WebSocket 的协议版本。在最初的时候 WebSocket 协议有不少种,各浏览器都不一样,如今你们都使用同一版本。
而后服务器会返回下列东西,表示已经接受到请求,成功创建 WebSocket。
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept:xxxxxxxx
Sec-WebSocket-Protocol:chat
这里就是 HTTP 最后负责的区域,告诉客户,已经成功切换协议。
Sec-WebSocket-Protocol 是通过服务器确认,而且加密事后的 Sec-WebSocket-key 。
Sec-WebSocket-Protocol 表示最终使用的协议、
至此,HTTP 已经完成了它全部的工做,接下来就是彻底按照 WebSocket 协议进行了。
3. WebSocket 的做用
前奏
ajax 轮询:其原理是,让浏览器每隔几秒就发送一次请求,询问服务器是否有新的信息
long poll:其原理和 ajax 轮询差很少,都是采用轮询的方式,不过采起的是阻塞模型(一直打电话,没收到就不挂电话),也就是说,客户端发起请求后,若是没消息,就一直不返回 Response 给客户端。直到有消息才返回,返回完以后,客户端再次创建链接,周而复始。
从上面能够看出其实这两种方式,都是在不断地创建 HTTP 链接,而后等待服务端处理,能够体现 HTTP 协议的另一个特色,被动性。
从上面很容易看出,无论怎么样,上面两种都是很是消耗资源的。ajax 轮询须要服务器有很快的处理速度和资源。long poll 须要有很高的并发,也就是说同时接待客户的能力。
主题
经过上面这两个例子,咱们能够看出,这两种方式都不是最好的方式,须要不少资源。一种须要更快的速度,一种须要更多并发,这两种都会致使性能需求愈来愈高。
还有,HTTP 是一个无状态协议。通俗就是,服务器天天要处理的请求不少,不会记得上次处理的你的请求参数和内容。
因此在这种状况下出现了 WebSocket。他解决了 HTTP 的这几个难题。首先,被动性,当服务器完成协议升级后,服务端就能够主动推送消息给客户端。只须要通过一次 HTTP 请求,就能够作到源源不断的信息传送了。
https://www.cnblogs.com/nnngu/p/9347635.html