WebSocket 协议介绍.
WebSocket Client/Server API 介绍.
MSE 介绍.
fMP4 介绍.
WebSocket
通常的 Web 应用都是围绕着 HTTP 的请求/响应模型而构建的. 所有的 HTTP 通信都是通过客户端来控制的,
都是由客户端向服务器发出一个请求, 服务器接收和处理完毕后再返回结果给客户端, 客户端再将数据展现出来. 这种模式不能满足实时应用的需求,
于是出现了 SSE, Comet 等 “服务器推” 的长连接技术.
WebSocket 是直接基于 TCP 连接之上的通信协议, 可以在单个 TCP 连接上进行全双工的通信. WebSocket 在
2011 年被 IETF 定为标准 RFC 6455, 并被 RFC 7936 所补充规范, WebSocket API 被 W3C 定为标准.
WebSocket 是独立的创建在 TCP 上的协议, HTTP 协议中的那些概念都不复存在, 和 HTTP 的唯一关联是使用 HTTP 协议的 101 状态码进行协议切换, 使用的 TCP 端口是 80, 可以用于绕过大多数防火墙的限制.
WebSocket 握手
为了更方便地部署新协议,HTTP/1.1 引入了 Upgrade 机制, 它使得客户端和服务端之间可以借助已有的 HTTP 语法升级到其它协议. 这个机制在 RFC7230 的6.7 Upgrade) 一节中有详细描述.
要发起 HTTP/1.1 协议升级,客户端必须在请求头部中指定这两个字段:
Connection: UpgradeUpgrade: protocol-name[/protocol-version]
如果服务端同意升级, 那么需要这样响应:
HTTP/1.1 101 Switching ProtocolsConnection: upgradeUpgrade: protocol-name[/protocol-version][... data defined by new protocol ...]
可以看到, HTTP Upgrade 响应的状态码是 101, 并且响应正文可以使用新协议定义的数据格式.
WebSocket 握手就利用了这种 HTTP Upgrade 机制. 一旦握手完成,后续数据传输就直接在 TCP 上完成.
WebSocket JavaScript API
目前主流的浏览器提供了 WebSocket 的 API 接口, 可以发送消息(文本或者二进制)给服务器, 并且接收事件驱动的响应数据.
Step1 检查浏览器是否支持 WebSocket.
if(window.WebSocket) { // WebSocket