想多人游戏?那你还不看看它!

目前大多数网站都在使用的传统 HTTP 协议,即由 Web 服务器经过 HTTP 接收并响应来自客户端的消息,整个发起请求与响应的过程相似咱们点外卖,由如下 2 部分构成:html

  • 下订单(发起请求):用户(客户端)下了一个订单(HTTP 请求)给餐厅(服务器)。
  • 接到订单后对订单进行处理(返回对应状态码):餐厅可以作这个菜(拥有对应资源),就开始准备(服务器获取资源),并返回已接单的信息(HTTP 状态码 200 等)。若是餐厅没法制做(没有对应资源),则直接拒绝返回给用户下单失败的讯息(HTTP 状态码404 等)

在这整个过程当中,餐厅都不会看到用户是谁,只须要接到订单就能够进行判断并返回信息。也就是说服务器仅须要判断 HTTP 请求,并做出响应(HTTP 相关状态码:200/403/404 等)。web

上述流程中,服务器存储内容,可是这些内容更新获取必须由客户端再次请求,服务器没法将更新主动发送给指定用户,显得十分笨拙。为了改进这一项, 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

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

服务端响应socket

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 协议的不一样协议,二者没有冲突。

推荐阅读

聊聊风口上的 eBPF

Wi-Fi 6 与 5G 相比哪一个更快?

相关文章
相关标签/搜索