博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebSocket 原理
阅读量:6936 次
发布时间:2019-06-27

本文共 1501 字,大约阅读时间需要 5 分钟。

WebSocket 原理

转载自个人博客,转载请声明

背景

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

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

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

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 的事了。

作者:长天之云

链接:
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处.

例子

下面给出发出建立连接请求时的 requestresponse

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

浏览器请求

GET / HTTP/1.1Upgrade: websocketConnection: UpgradeHost: example.comOrigin: nullSec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==Sec-WebSocket-Version: 13

服务器回应

HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=Sec-WebSocket-Origin: nullSec-WebSocket-Location: ws://example.com/
你可能感兴趣的文章
Redis数据库
查看>>
html5 Canvas绘制图形入门详解
查看>>
ASP.NET 5中的静态文件处理
查看>>
Queue的简单实现
查看>>
js数组转字符串
查看>>
ssm中返回中文字符串时出现乱码?
查看>>
【评分】第二次作业——个人项目实战
查看>>
javascript实现页面跳转
查看>>
servlet和filter初始化
查看>>
设为首页 添加收藏
查看>>
MySQL相关命令
查看>>
15个nosql数据库
查看>>
react-router
查看>>
【转】jmeter学习笔记——脚本录制
查看>>
I/O(流)读写函数
查看>>
A Tour of Go Variables with initializers
查看>>
A Tour of Go Interfaces
查看>>
移动APP安全检测工具大全
查看>>
最大上升子矩阵
查看>>
加快网站访问速度
查看>>