WebSoket 的广泛应用
目前大多数网站都在使用的传统 HTTP 协议,即由 Web 服务器通过 HTTP 接收并响应来自客户端的消息,整个发起请求与响应的过程类似我们点外卖,由以下 2 部分构成:
下订单(发起请求):用户(客户端)下了一个订单(HTTP 请求)给餐厅(服务器)。
接到订单后对订单进行处理(返回对应状态码):餐厅能够做这个菜(拥有对应资源),就开始准备(服务器获取资源),并返回已接单的信息(HTTP 状态码 200 等)。如果餐厅无法制作(没有对应资源),则直接拒绝返回给用户下单失败的讯息(HTTP 状态码404 等)
在这整个过程中,餐厅都不会看到用户是谁,只需要接到订单就可以进行判断并返回信息。也就是说服务器仅需要判断 HTTP 请求,并作出响应(HTTP 相关状态码:200/403/404 等)。

上述流程中,服务器存储内容,但是这些内容更新获取必须由客户端再次请求,服务器无法将更新主动发送给指定用户,显得十分笨拙。为了改进这一项, Long Poll 以及 Ajax 轮询应运而生。可是这两种方式的成本极大,而且必须要客户端保持联系,一旦断开就需要重新发起请求。所以在这两种方式的前提下,WebSocket 诞生了。
什么是 WebSoket?
为了能够满足随时获取数据的需求,,WebSocket 协议诞生,并在 2011 年成为国际标准。 作为 HTML 5 规范的组成部分之一,WebSocket 是一种全新的协议。它将 TCP 的 Socket(套接字)应用在了 Web page 上,从而使通信双方建立起一个保持在活动状态连接通道,并且属于全双工(双方同时进行双向通信)。借助 WebSocket 我们可以在开放网络上进行多人游戏,实时聊天,多人协作等,目前大多数浏览器都支持该协议,包括 Google Chrome,Firefox,Safari,Opera,Microsoft Edge和Internet Explorer。
WebSocket 的优势
WebSocket 最大的特点就是,客户端可以主动发送消息到服务端,服务端也可以主动向客户端发送消息,实现双向通讯。

上图可以看出,相比较轮询,WebSocket 在第一次 HTTP 握手之后,就改走 WebSocket 了,对于 HTTP 的长连接(非持久连接),WebSocket 的持久连接更具实效性。
WebSocket 其优势主要包括以下几个方面:
实时性,客户端和服务端可以随时互相推送消息,延迟更小,短时间内可以更多的推送消息。
兼容性,与 HTTP 有着很好的兼容性,握手时采用HTTP协议,默认也是端口80,443 ,可以很大部分绕过防火墙的限制。
保持连接状态,创建连接后,保持其状态,之后的通信可以省略其信息。
协议标识符为 ws,如果加密为 wss
WebSocket 连接过程示例
客户端
GET /chat HTTP/1.1
Host: 127.0.0.1:4000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: aFeKKHNhbFYZSBub14oUK==
Origin: http://localhost:4000
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
服务端响应
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
重要字段说明:
Connection:Upgrade,表示客户端协议升级。
Upgrade:WebSocket,升级到 WebSocket 协议。
Sec-WebSocket-Key:随机字符串,对应服务端响应的 Sec-WebSocket-Accept 字段,将Sec-WebSocket-Key:指定方式计算后作为服务端响应 Sec-WebSocket-Accept 的值。通过这样,避免 HTTP 协议误以为 WebSocket 协议。
Sec-WebSocket-Version:表示支持的 WebSocket 版本。
WebSocket 用途和场景
社交,聊天等
聊天应用特点就是低延迟,高及时,采用的 WebSocket 协议,用户将消息发送到服务器,服务器直接将消息发送给收件人。另外,服务器还可以在通道中存储多个连接,用户能实现一次性向多人发送消息,或者查看房间内多个人的信息,实现了实时沟通交流。
多人游戏

多人游戏比较常见的模式就是,服务器用来存储状态,玩家将改变动作的状态发送到服务器,然后更新游戏状态给所有玩家,使用 HTTP 的话,每个玩家需要定期向服务器请求状态。使用 WebSocket 后,玩家的每个动作将实时的推送给所有玩家。
多人协作
需要多人在共享文档上一起工作吗?可以使用 WebSocket 实现多人共同协作,每个人的动作更新时,都会推送给所有参与者。
地图等定位相关
每当用户的 GPS 坐标更改时,更新服务器后,就会根据用户的最新坐标推送新的数据。
股票、基金报价展示
金融界数据瞬息万变,几乎是每毫秒都在变化。如果采用传统的网络架构则无法满足实时性,使用 WebSocket 可以流式更新这些数据变化而不需要等待。

目前又拍云已经全面支持 WebSocket,为采用 ws/wss 协议进行通信的客户提供优质的加速服务,能有效降低延迟,提高传输效率。产品特性及优势包括:
智能路由: 实时探测互联网线路,链路耗时跟踪分析,智能选择最优路径。
协议优化: 通过增大 TCP 窗口初始大小,调节慢启动阀值等等,解决传统协议存在的缺陷,提高传输效率。
支持WSS: 用户可自主申请、绑定 SSL 证书,一键开启 WSS 加速。同时又拍云提供多种品牌的免费、付费证书申购,为用户提供一站式 WSS 安全加速解决方案。
数据统计: 支持实时带宽、流量查询,全平台自助化查询,日志分析及下载支持,时刻掌控业务全局。
WebSocket 依赖 HTTP 协议而存在,但是同时 HTTP 和 WebSocket 都是基于 TCP 协议的不同协议,两者没有冲突。
推荐阅读
WebSoket 的广泛应用的更多相关文章
- springboot中websoket的使用
知识点:springboot项目中,websoket实时推送技术的介绍与使用 一.双向通信 http协议通信只能由客户端发起请求,服务端返回查询结果,如果我们想定时获取服务端的状态变化,相对 ...
- tornado之websoket
继承WebSoketHandler def open(self): # 当一个WebSoket连接建立之后被调用 def on_message(self, message): # 当客户端发送一个消息 ...
- Electron + Websoket 通讯
Electron + WebSocket + node.js 通信 描述 本文主要介绍了结合 Electron 和 node.js 进行 Websocket 通讯的一个简单例子. 项目结构 main. ...
- swoole中websoket创建在线聊天室(php)
swoole中websoket创建在线聊天室(php) swoole现仅支持Linix,macos 创建websocket服务器 首先现在服务器创建一个websocket服务器 <?php // ...
- [置顶] WEBSOKET服务器搭建
简单介绍一下tomcat的webSocketAPI使用: 在这里啰嗦几句:[ 很多朋友听说webSocket不知道是什么.知道是什么不知道怎么用,知道怎么用不知道具体实现.其实我当初也是这样. 实际上 ...
- websoket使用Protocol Buffers3.0传输
Protocol Buffers是Google推出的一个数据交换格式,相对于xml它的体积更小,更快,因为它是二进制传输的.3.0相对于2.0变动比较大.这些变动可以去看官方说明. 在前端使用Prot ...
- 《图解Http》8: 用户身份认证Cookie管理session; 9:HTTP的追加协议(websoket, webDAV)
基本认证,(安全等级低,多数网站不使用) Digest认证:(也不怎么用) SSL客户端认证:(凭借客户端证书认证,如网银登陆) 表单认证:用户名/密码.(常用) SSL客户端认证采用two-fact ...
- websoket
http://blog.csdn.net/xueling022/article/details/52902358
- 什么是websoket
概念 HTML5作为下一代WEB标准,拥有许多引人注目的新特性,如Canvas.本地存储.多媒体编程接口.WebSocket 等等.今天我们就来看看具有“Web TCP”之称的WebSocket. W ...
- vue中websoket的使用
首先安装npm install --save websocket-heartbeat-js@^1.0.7 在main.js中 引入并挂载全局方法 import WebsocketHeartbeat ...
随机推荐
- HDL刷题:Count clock
原题链接 要写一个12小时的时钟. 由题目得知,reset信号的优先级最高,其次是enable,这里很好实现. 我的思路: 写了一个4位的bcd计数器,并实例化了4个,对ss与mm的[7:4]与[3: ...
- nmap命令说明
目录 主机发现 扫描技术 端口规格和扫描顺序 服务/版本检测 脚本扫描 操作系统检测 时间和性能: 防火墙/IDS的逃避和欺骗 输出 杂项 平时看到别人的nmap命令都是一大串,根本看不懂为什么,自己 ...
- redis基础命令复习(Sring,Hash,List,Set,SortedSet)
1,Redis数据结构: https://redis.io/commands 2,Redis命令---Redis通用命令(常见的有,keys,del,exists,expire,ttl) 2.1,ke ...
- C/C++ Zlib库封装MyZip压缩类
Zlib是一个开源的数据压缩库,提供了一种通用的数据压缩和解压缩算法.它最初由Jean-Loup Gailly和Mark Adler开发,旨在成为一个高效.轻量级的压缩库,其被广泛应用于许多领域,包括 ...
- [ARC122E] Increasing LCMs
Problem Statement We have a sequence of $N$ positive integers: $A_1,A_2,\cdots,A_N$. You are to rear ...
- 玩转Spring状态机
说起Spring状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring状态机就是状态模式的一种实现,在介绍Spring状态机之前,让我们来看看设计模式中的状态模式. 1 ...
- 数字孪生融合GIS系统将为交通领域带来什么改变?
随着科技的不断发展,数字孪生和GIS技术正成为交通领域的新宠.数字孪生是指通过数学建模.数据采集和实时仿真等技术手段,将实体世界与数字世界相互关联,形成一个全新的虚拟系统.而GIS(地理信息系统)则是 ...
- C++ Qt开发:SqlTableModel映射组件应用
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍SqlTabl ...
- influxdb 进行数据删除和修改
本文为博主原创,转载请注明出处: 1.条件删除数据 InfluxDB 只支持基于时间的删除操作. 可以使用 DELETE 语句来删除指定时间范围内的数据.例如,以下的 SQL 语句将删除 measur ...
- 初探Git:理解和使用版本控制的魔法
遥远的古代,有一位美丽的仙女叫做嫦娥.她的丈夫后羿获得了令人长生不老的鹿骨露.一天,嫦娥在好奇心的驱使下,独自偷喝了这瓶仙药. 喝下仙药的瞬间,嫦娥发现自己开始飘起,越飘越高,最后飘向了月亮.嫦娥惊慌 ...