HTML5 WebSocket API
HTML5 规范提供了 WebSocket API,使 Web 页面能够使用 WebSocket 协议与远程主机进行双向通信。
构造函数
1 | WebSocket WebSocket(in DOMString url, in optional DOMString protocols); |
- url
表示要连接的响应 WebSocket 的地址。 - protocols
[可选 ] 这些字符串用来表示子协议,这样做可以让一个服务器实现多种 WebSocket 子协议。默认为空。
1 | var ws = new WebSocket("ws://example.com:80/test") |
常用属性
属性名 | 类型 | 描述 |
---|---|---|
url | DOMString | [只读 ] 传入构造器的 URL。它必须是一个绝对地址的 URL。 |
binaryType | DOMString | 表示被传输二进制的内容的类型。创建 WebSocket 对象时,默认赋值为 blob;在获取该属性值时,会返回最后设置的一个值,可能是 blob 或 arraybuffer。 |
readyState | unsigned short | [只读 ] 连接的当前状态。取值是 Ready state constants 之一。 |
onopen | EventListener | 连接打开事件的事件监听器。当 readyState 的值变为 OPEN 的时候会触发该事件。该事件表明这个连接已经准备好接受和发送数据。这个监听器会接受一个名为”open”的事件对象。 |
onmessage | EventListener | 消息事件的事件监听器,当有消息到达的时候该事件会触发。这个 Listener 会被传入一个名为”message”的 MessageEvent 对象。 |
onerror | EventListener | 错误发生时监听 error 事件的事件监听器。会接受一个名为“error”的 event 对象。 |
onclose | EventListener | 连接关闭事件监听器。当 WebSocket 对象的 readyState 状态变为 CLOSED 时会触发该事件。这个监听器会接收一个叫 close 的 CloseEvent 对象。 |
onopen、onmessage、onerror 和 onclose 属性,除了直接给属性赋值外,还可以通过给 WebSocket 添加监听事件的方式来使用。
1 | ws.onopen = function(event) { |
1 | ws.addEventListener("open", function(event){ |
Ready state 常量
常量 | 值 | 描述 |
---|---|---|
CONNECTING | 0 | 连接还没建立 |
OPEN | 1 | 连接已经建立并准备好数据传输 |
CLOSING | 2 | 连接正在关闭,或已调用 close() 方法 |
CLOSED | 3 | 连接已经关闭 |
方法
send(data)
- data
要发送的数据。参数类型可能是 DOMString、ArrayBuffer、Blob 或 ArrayBufferView。
close([code],[reason])
code
[可选 ] 一个 unsigned short 数字值表示关闭连接的状态号,表示连接被关闭的原因。如果这个参数没有被指定,默认的取值是 1000 (表示正常连接关闭)。具体取值请看 CloseEvent 的 code 属性取值。reason
[可选 ] 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于 123 字节的 UTF-8 文本(不是字符)。
扩展实现
reconnecting-websocket
基于 WebSocket API 封装,支持自动重连。SockJS-client
由于 WebSocket API 有浏览器版本限制(IE 10+),SockJS 为了解决这个问题,底层首先使用 WebSocket API 尝试建立连接,如果失败,会根据不同浏览器的特点选择流传输或者轮询的方式。