WebSocket对象用于创建与服务器的WebSocket连接,以及在该连接上发送和接收数据 。
推荐一个在线webSocket测试的工具 http://www.idcd.com/tool/socket 。socket服务器连接地址 ws://www.idcd.com:8866
var webSocket = new WebSocket(url, protocols);
参数说明
url
连接的URL,这应该是WebSocket服务器响应的URL。wss://为安全连接,ws://连接用于本地连接。
protocols
可选的,指定可接受的子协议。
WebSocket连接
var webSocket= new WebSocket("wss://www.idcd.com/socketserver", "protocolOne");
var webSocket= new WebSocket("ws://www.idcd.com/socketserver", ["protocolOne", "protocolTwo"]);
返回一个新创建的WebSocket对象。
属性
WebSocket.readyState
只读属性,返回当前WebSocket连接的状态
状态 | 值 | 描述 |
CONNECTING | 0 | 表示正在连接 |
OPEN | 1 | 表示连接成功 |
CLOSING | 2 | 表示连接正在关闭 |
CLOSED | 3 | 表示连接已经关闭或者连接失败 |
var readyState = webSocket.readyState;
WebSocket.url
只读属性返回的绝对URL
var url = webSocket.url;
WebSocket.protocol
只读属性,返回子服务器协议的名称; 这是创建WebSocket对象时参数中指定的字符串之一,如果未建立连接,则为空字符串。
var protocol = webSocket.protocol;
WebSocket.onopen
打开连接时要调用的事件侦听器
webSocket.onopen = function(event) {
console.log("WebSocket is open now.");
};
WebSocket.onmessage
从服务器收到消息时要调用的事件侦听器。
webSocket.onmessage = function(event) {
console.debug("WebSocket message received:", event);
};
WebSocket.onerror
发生错误时将调用事件侦听器。
webSocket.onerror = function(event) {
console.error("WebSocket error observed:", event);
};
WebSocket.onclose
连接关闭时要调用的事件侦听器。
webSocket.onclose = function(event) {
console.log("WebSocket is closed now.");
};
WebSocket.extensions
只读属性,服务器选择的扩展名。
var extensions = webSocket.extensions;
WebSocket.bufferedAmount
只读属性,排队数据的字节数。
var bufferedAmount = webSocket.bufferedAmount;
WebSocket.binaryType
连接使用的二进制数据类型。
var binaryType = webSocket.binaryType;
方法
WebSocket.close([code[, reason]])
关闭连接。
WebSocket.close();
参数
code | 可选的 指示状态代码的数字值,用于解释为什么关闭连接。如果未指定此参数,则默认值为1005。 |
reason | 可选的 易于理解的字符串,用于说明连接为何关闭。该字符串不得超过123个字节的UTF-8文本(非字符)。 |
抛出异常
INVALID_ACCESS_ERR :code指定了无效的。
SYNTAX_ERR :该reason字符串过长或包含不成替代品
指示状态码
状态码 | 名称 | 描述 |
0–999 | 保留段, 未使用. | |
1000 | CLOSE_NORMAL | 正常关闭; 无论为何目的而创建, 该链接都已成功完成任务. |
1001 | CLOSE_GOING_AWAY | 终端离开, 可能因为服务端错误, 也可能因为浏览器正从打开连接的页面跳转离开. |
1002 | CLOSE_PROTOCOL_ERROR | 由于协议错误而中断连接. |
1003 | CLOSE_UNSUPPORTED | 由于接收到不允许的数据类型而断开连接 (如仅接收文本数据的终端接收到了二进制数据). |
1004 | 保留. 其意义可能会在未来定义. | |
1005 | CLOSE_NO_STATUS | 保留. 表示没有收到预期的状态码. |
1006 | CLOSE_ABNORMAL | 保留. 用于期望收到状态码时连接非正常关闭 (也就是说, 没有发送关闭帧). |
1007 | Unsupported Data | 由于收到了格式不符的数据而断开连接 (如文本消息中包含了非 UTF-8 数据). |
1008 | Policy Violation | 由于收到不符合约定的数据而断开连接. 这是一个通用状态码, 用于不适合使用 1003 和 1009 状态码的场景. |
1009 | CLOSE_TOO_LARGE | 由于收到过大的数据帧而断开连接. |
1010 | Missing Extension | 客户端期望服务器商定一个或多个拓展, 但服务器没有处理, 因此客户端断开连接. |
1011 | Internal Error | 客户端由于遇到没有预料的情况阻止其完成请求, 因此服务端断开连接. |
1012 | Service Restart | 服务器由于重启而断开连接. [Ref] |
1013 | Try Again Later | 服务器由于临时原因断开连接, 如服务器过载因此断开一部分客户端连接. [Ref] |
1014 | 由 WebSocket 标准保留以便未来使用. | |
1015 | TLS Handshake | 保留. 表示连接由于无法完成 TLS 握手而关闭 (例如无法验证服务器证书). |
1016–1999 | 由 WebSocket 标准保留以便未来使用. | |
2000–2999 | 由 WebSocket 拓展保留使用. | |
3000–3999 | 可以由库或框架使用. 不应由应用使用. 可以在 IANA 注册, 先到先得. | |
4000–4999 | 可以由应用使用. |
WebSocket.send(data)
使要发送的数据入队。
webSocket.send("Hello server!");
参数
数据发送到服务器,可以是以下类型:
USVString | 文本字符串,字符串以UTF-8格式添加到缓冲区。 |
ArrayBuffer | 您可以发送类型化数组对象使用的基础二进制数据。 |
Blob | 指定一个值Blob会使Blob的原始数据进入二进制帧。 |
ArrayBufferView | 您可以将任何JavaScript类型的数组对象作为二进制帧发送。 |
抛出异常
INVALID_STATE_ERR : 当前没有连接OPEN。
SYNTAX_ERR : 数据是具有未配对代理的字符串。
Event 事件监听
使用addEventListener()或通过将事件侦听器分配给此接口的属性来侦听这些事件。
事件名称
close | 当与服务器的连接关闭时触发,也可以使用onclose属性。 |
error | 当WebSocket由于错误而关闭与的连接(例如无法发送某些数据)时触发,也可使用onerror属性。 |
message | 接收数据时触发,也可使用onmessage属性。 |
open | 与服务器的连接打开时触发,也可使用onopen。 |
使用示例
// 创建一个WebSocket连接对象.
var webSocket = new WebSocket('ws://localhost:8080');
// 监听 打开连接时
webSocket.addEventListener('open', function (event) {
webSocket.send('Hello Server!');
});
// 监听 收到消息时
webSocket.addEventListener('message', function (event) {
webSocket.log('Message from server ', event.data);
});
发表回复
要发表评论,您必须先登录。