Websocket学习笔记

来源:互联网 发布:淘宝突破类目数量限制 编辑:程序博客网 时间:2024/05/28 22:11

1、Websockt 是HTML5出的持久化的协议,HTML是指一系列新的规范、新技术。
2、HTTP是不支持持久连接的(长连接,循环连接不算)
3、HTTP的生命周期通过 Request 来界定,也就是一个 Request 一个 Response ,那么在 HTTP1.0 中,这次HTTP请求就结束了。
4、在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。
5、首先我们来看个典型的 Websocket 握手(借用Wikipedia的。。)
请求:

GET /chat HTTP/1.1Host: server.example.comUpgrade: websocket    **-----让Apache 、 Nginx 等服务器知道是Websocket协议**Connection: Upgrade  **-----让Apache 、 Nginx 等服务器知道是Websocket协议**Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==   **-----Base64 encode 浏览器随机生成,验证是否真的Websocket助理**Sec-WebSocket-Protocol: chat, superchat   **----是一个用户定义的字符串,用来区分同URL下,不同的服务所需要的协议**Sec-WebSocket-Version: 13   **----告诉服务器所使用的 Websocket Draft (协议版本)**Origin: http://example.com

服务器返回:

HTTP/1.1 101 Switching ProtocolsUpgrade: websocket   **----依然是固定的,告诉客户端即将升级的是 Websocket 协议,而不是mozillasocket,lurnarsocket或者shitsocket。**Connection: Upgrade   **---依然是固定的,告诉客户端即将升级的是 Websocket 协议,而不是mozillasocket,lurnarsocket或者shitsocket。**Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=   **---经过服务器确认,并且加密过后的 Sec-WebSocket-Key 。**Sec-WebSocket-Protocol: chat   **---表示最终使用的协议**

6、ajax轮询
ajax轮询的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。
每次进行一次Request请求,已经得到一个Response 进行多次

7、long poll
long poll 其实原理跟 ajax轮询 差不多,都是采用轮询的方式,不过采取的是阻塞模型。(一直打电话,没收到就不挂电话)。
每次进行一次Request请求,如果没有消息那么一直阻塞不会返回Respone ,直到有就返回,而客户端接收后再次进行Request请求

8、Ajax轮询与Long poll 共同点都是只能是客户端主动联系服务端,而服务端不能主动联系客户端,两种都是非常消耗资源的。ajax轮询 需要服务器有很快的处理速度和资源。Long poll 需要很高的并发。而且同步可能有延迟。

9、程序都是要经过两层代理,分别是解析HTTP协议的Nginx等服务器,和对应的Handler(PHP等),而消耗资源问题一般是因为Handler处理的速度慢。而Websocket解决消耗资源问题是因为他能建立持久连接,有消息就主动返回。

10、传统的方式上,要不断的建立,关闭HTTP协议,由于HTTP是非状态性的,每次都要重新传输 identity info (鉴别信息),来告诉服务端你的身份,这样以来服务器的处理效率也就下降。

11、Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求,这样就解决了接线员要反复解析HTTP协议,还要查看identity info的信息。

12、不是所有的客户端上都支持Websocket,这样只能使用Long poll 和Ajax轮询来实现类是的功能。

学习知乎上的文章得到的笔记 http://www.zhihu.com/question/20215561

原创粉丝点击