WebSocket API总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_22627687/article/details/72953244

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

报告连接状态                   

                特性常量                   

         值          

状态

WebSocket.CONNECTING

0

连接正在进行中,但还未建立

WebSocket.OPEN

1

连接已经建立。消息可以在客户

WebSocket.CLOSING

2

连接正在进行关闭握手

WebSocket.CLOSED

3

连接已经关闭,不能打开

只读

 

方法

描述

 

 

send()

连接打开时发送数据

function myEventHandler(data) {

   if (ws.readyState === WebSocket.OPEN) {

          ws.send(data);

   } else {

      // Do something else in this case.

   }

}

 

 

 

 

close(code,reason)

关闭连接。

参数说明

code 可选的

指示状态代码的数字值,解释连接正在关闭的原因。如果未指定此参数,则假定默认值为1000(表示正常的事务完成关闭)。

 

reason 可选的

一个人类可读的字符串,解释连接正在关闭的原因。该字符串必须不超过123个字节的UTF-8文本(不是字符)。

例: ws.close(1000,"正常关闭");

抛出异常

INVALID_ACCESS_ERR

code指定了无效。

SYNTAX_ERR

该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广泛理解

猜你喜欢

转载自blog.csdn.net/qq_22627687/article/details/72953244