一旦 Web 服务器与客户端之间建立起 WebSocket 协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送 JSON、XML、HTML 或图片等任意格式的数据。
由于是建立在 HTTP 基础上的协议,因此连接的发起方仍是客户端,而一旦确立 WebSocket 通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。
下面我们列举一下 WebSocket 协议的主要特点。
推送功能
支持由服务器向客户端推送数据的推送功能。这样,服务器可直接发送数据,而不必等待客户端的请求。
减少通信量
只要建立起 WebSocket 连接,就希望一直保持连接状态。和 HTTP 相比,不但每次连接时的总开销减少,而且由于 WebSocket 的首部信息很小,通信量也相应减少了。
为了实现 WebSocket 通信,在 HTTP 连接建立之后,需要完成一次“握手”
(Handshaking)的步骤。
■ 握手·请求
为了实现 WebSocket 通信,需要用到 HTTP 的 Upgrade
首部字段,告知服务器通信协议发生改变,以达到握手的目的。
Sec-WebSocket-Key
字段内记录着握手过程中必不可少的键值。 Sec-WebSocket-Protocol
字段内记录使用的子协议。子协议按 WebSocket 协议标准在连接分开使用时,定义那些连接的名称。
■ 握手·响应
对于之前的请求,返回状态码 101 Switching Protocols
的响应。
Sec-WebSocket-Accept
的字段值是由握手请求中的 Sec-WebSocket- Key
的字段值生成的。
成功握手确立 WebSocket 连接之后,通信时不再使用 HTTP 的数据帧,而采用 WebSocket 独立的数据帧
。
■ WebSocket●API
JavaScript 可调用“The WebSocket API”(http://www.w3.org/TR/websockets/,由 W3C 标准制定)内提供的 WebSocket 程序接口,以实现 WebSocket 协议下全双工通信。
以下为调用 WebSocket API,每 50ms 发送一次数据的实例。
网友评论