WebSocket 原理

WebSocket 原理

转载自我的博客,转载请声明走啊走的记录:WebSocket 原理html

背景

之前的网站为了实现推送功能,使用的方法都是轮询。所谓的轮询就是在特定的时间间隔(例如1秒),由浏览器向服务器发出一个 Http request,而后服务器返回最新的数据给客户端浏览器,从而给出一种服务端实时推送的假象。因为Http RequestHeader(请求头)很长,而传输的数据可能很短就只占一点点,每次请求消耗的带宽大部分都消耗在 Header上。从网上资料得知后来还有改进的轮询方法叫作 Comet,使用 Ajax。但这种技术虽然可达到双向通讯,但依然须要发出请求,并且在Comet中,广泛采用了长连接,这也会大量消耗服务器带宽和资源。git

因此HTML5定义了 WebSocket 协议,以及相关的编程API,能更好的实现双向通讯且节省服务器资源和带宽。github

注意WebSocket 实际上指的是一种协议,与咱们熟知的 Http 协议是同等的一个网络协议。用网络模型结构来解释的话, WebSocketHttp 协议都属于 应用层协议,二者都基于传输层协议 TCPweb

WebSocket 协议

与HTML5的联系

Html5是指的一系列新的API,或者说新规范,新技术。在这个新规范中定义了一个为了实现双向实时通讯的新协议 WebSocket,而且提供了一套 JavaScript API 供开发者来调用实现通讯。服务器端的实现由诸如:Tomcat、Jetty等等。编程

与Http协议的联系

简单归纳来看: WebSocket 不是 Http 协议, Http 协议只是被 WebSocket 使用来创建 WebSocket 链接,链接创建了之后客户端与服务器的双向通讯就与 Http 无关了。浏览器

WebSocket 协议和 HTTP 协议是两种不一样的东西,它们的联系以下:服务器

客户端开始创建 WebSocket 链接时要发送一个 header 标记了 Upgrade 的 HTTP 请求,表示请求协议升级。因此服务器端作出响应的简便方法是,直接在现有的 HTTP 服务器软件和现有的端口上实现 WebSocket 协议,重用现有代码(好比解析和认证这个 HTTP 请求。若是在 TCP 协议上实现,这两个功能就要从新实现),而后再回一个状态码为 101 的 HTTP 响应完成握手,再日后发送数据时就没 HTTP 的事了。websocket

做者:长天之云
连接:https://www.zhihu.com/question/20215561/answer/14365823
来源:知乎
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处.网络

例子

下面给出发出创建链接请求时的 requestresponsesocket

注意:下面的请求报文与响应报文中的内容不是完整的报文,而是 WebSocket 基于 Http 请求(响应)报文添加的内容。

浏览器请求

GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: example.com
Origin: null
Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==
Sec-WebSocket-Version: 13

服务器回应

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=
Sec-WebSocket-Origin: null
Sec-WebSocket-Location: ws://example.com/
相关文章
相关标签/搜索