NCU.卓越141.chenyuchao
一、检查 WebSocket 支持
var host = "ws://localhost:8080/mychat";
var ws;
if ('WebSocket' in window) {
ws = new WebSocket(host);
} else if ('MozWebSocket' in window) {
ws = new MozWebSocket(host);
} else {
window.alert("浏览器不支持WebSocket");
return;
}
说明构造函数 var ws = new WebSocket(url,[protocols]);
url | ws(或wss)://ip:port/uri wss是WebSocketSecure缩写 |
Protocols(可选) | 可以使用的子协议包括 XMPP(可扩展息处理现场协议)、SOAP( 简单对象访问协议)或者自定义协议 |
函数异常 | SECURITY_ERR 正在尝试连接的端口被阻止。 |
WebSocket的浏览器支持 Chrome for Android57+ Chrome16+ iOS Safari6.0+ UC Browser for Android11.4+ Firefox11+ IE10+ Samsung Internet 4+ Opera Mini None Safari7+ Android Browser4.4+ Edge12+ Opera12.1+ |
二、WebSocket 属性和方法
属性 | 类型 | 描述 | |||||||||||||||
onopen |
EventListener | 服务器响应了WebSocket连接请求,open事件触发并建立了一个连接 ws.onopen = function () { console.log(ws); }; | |||||||||||||||
onmessage |
EventListener | 1、接收到来自服务器的数据 //接收文本消息并显示消息内容 ws.onmessage = function (e) { console.log(e.data); }; 2、WebSocket还可以处理二进制数据,这种数据作为Blob消息或者ArrayBuffer消息。因为设置WebSocket消息二进制数据类型的应用会影响二进制消息,所以必须在读取数据之前决定用于客户端的二进制数据的类型 ws.binaryType = "blob"; ws.onmessage = function(e) { if (e.data instanceof Blob) { console.log("Blob", e.data); var blob = new Blob(e.data); } };
ws.binaryType = "arraybuffer"; ws.onmessage = function(e) { if (e.data instanceof ArrayBuffer) { console.log("ArrayBuffer", +e.data); var a = new Uint8Array(e.data); } }; | |||||||||||||||
onerror |
EventListener | 响应意外故障的时候触发,如果你接收一个 error 事件,可以预期很快就会触发 close 事件。error事件处理程序是调用服务器重连逻辑以及处理来自 WebSocket 对象的异常的最佳场所。 ws.onerror = function(e) { console.log(e); }; | |||||||||||||||
onclose |
EventListener | 在WebSocket连接关闭时触发 /* * close 事件有 3 个有用的属性(property),可以用于错误处理和恢复 * e.wasClean 布尔属性,表示连接是否顺利关闭 * e.code 表示服务器发送的关闭握手状态 * e.reason * */ ws.onclose = function(e) { console.log(e); }; | |||||||||||||||
url |
| 由构造函数解析的URL。这是一个绝对的URL 只读 | |||||||||||||||
binaryType | DOMString | 指示由连接发送的二进制数据的类型的字符串 | |||||||||||||||
bufferedAmount | unsigned long | 浏览器将为你的客户端应用程序缓存出站数据,从而使你可 以随时调用 send(),发送任意数量的数据。可以使用 bufferedAmount 特性检查已经进入队列,但是尚未发送到服务器的字节数。 只读 | |||||||||||||||
extensions | DOMString | 服务器选择的扩展 | |||||||||||||||
protocol | DOMString | 指示服务器选择的子协议的名称的字符串; 这将是protocols创建WebSocket对象时在参数中指定的字符串之一。 | |||||||||||||||
readyState |
unsigned short | 报告连接状态
只读 |
方法 | 描述 |
send() | 连接打开时发送数据 function myEventHandler(data) { if (ws.readyState === WebSocket.OPEN) { ws.send(data); } else { // Do something else in this case. } } |
close(code,reason) | 关闭连接。 参数说明
指示状态代码的数字值,解释连接正在关闭的原因。如果未指定此参数,则假定默认值为1000(表示正常的“事务完成”关闭)。
一个人类可读的字符串,解释连接正在关闭的原因。该字符串必须不超过123个字节的UTF-8文本(不是字符)。 例: ws.close(1000,"正常关闭"); 抛出异常
该reason字符串过长或包含不成对替代品。 |
code附录 1000 正常关闭 当你的会话成功完成时发送这个代码 1001 离开 因应用程序离开且不期望后续的连接尝试而关闭连接时,发送这一代码。服务器可能关闭,或者客户端应用程序可能关闭 1002 协议错误 当因协议错误而关闭连接时发送这一代码 1003 不可接受的数据类型 当应用程序接收到一条无法处理的意外类型消息时发送这一代码 1004 保留 不要发送这一代码。根据 RFC 6455,这个状态码保留,可能在未来定义 1005 保留 不要发送这一代码。WebSocket API 用这个代码表示没有接收到任何代码 1006 保留 不要发送这一代码。WebSocket API 用这个代码表示连接异常关闭 1007 无效数据 在接收一个格式与消息类型不匹配的消息之后发送这一代码。如果文本消息包含错误格式的 UTF-8 数据,连接应该用这个代码关闭 1008 消息违反政策 当应用程序由于其他代码所不包含的原因终止连接,或者不希望泄露消息无法处理的原因时,发送这一代码 1009 消息过大 当接收的消息太大,应用程序无法处理时发送这一代码(记住,帧的载荷长度最多为64 字节。即使你有一个大服务器,有些消息 也仍然太大。) 1010 需要扩展 当应用程序需要一个或者多个服务器无法协商的特殊扩展时,从客户端(浏览器)发送这一代码 1011 意外情况 当应用程序由于不可预见的原因,无法继续处理连接时,发送这一代码 1015 TLS失败(保留) 不要发送这个代码。WebSocket API 用这个代码表示 TLS 在 WebSocket 握手之前失败。 0 ~ 999 禁止 1000 以下的代码是无效的,不能用于任何目的 1000 ~ 2999 保留 这些代码保留以用于扩展和 WebSocket 协议的修订版本。按照标准规定使用这些代码,参见表 3-4 3000 ~ 3999 需要注册 这些代码用于“程序库、框架和应用程序”。这些代码应该在 IANA(互联网编号分配机构)公开注册 4000 ~ 4999 私有 在应用程序中将这些代码用于自定义用途。因为它们没有注册,所以不要期望它们能被其他 WebSocket广泛理解 |