websocket

websocket

websocketAPI

这里只介绍web端的api,想要查看它的属性方法,最简单的方式就是创建一个实例对象,然后在控制台中查看它的详情

1.创建一个socket实例

var socket = new WebSocket("url"[,[]]);
//这里要注意的是url必须是绝对url,如:ws://www.xxxx.com/index.html也可以是wss:
//第二个可选参数是字符串或者数组,每个字符串都应代表一个子协议名称,而服务器只能接受数组中通过的一个子协议。访问 WebSocket 对象的 protocol 属性可确定接受的子协议。

同源策略对websocket不适用,因此可以通过它打开任何站点的链接。至于是否能够通信完全取决于服务器,对方通过握手信息可以知道请求源。
websocket没有readystatechange事件,但是可通过观察实例对象的readystate属性值来确定其状态。

2.属性介绍

readystate

socket.readystate == 0 //正在建立连接
                  == 1 //已经建立连接
                  == 2 //正在关闭连接
                  == 3 //已经关闭连接

binaryType

WebSocket 可以接收二进制讯息。接收的二进制帧可以是 Blob 或 ArrayBuffer 格式。要指定收到的二进制数据的格式,可将 WebSocket 对象的 binaryType 属性设为“blob”或“arraybuffer”。默认格式为“blob”。

socket.binaryType = arraybuffer //设定值(一般不用设定该属性)

bufferedAmount

设计应用程序时,你可能想要检查发往服务器的缓冲数据量,特别是在客户端应用程序向服务器发送大量数据的时候。尽管调用send()是立即生效的,但是数据在互联网上的传输却不是如此。浏览器将为你的客户端应用程序缓存出站数据,从而使你可以随时调用send(),发送任意数量的数据。然而,如果你想知道数据在网络上传送的速率,WebSocket对象可以告诉你缓存的大小。你可以使用bufferedAmount特性检查已经进入队列,但是尚未发送到服务器的字节数。这个特性报告的值不包括协议组帧开销或者操作系统、网络硬件所进行的缓冲。
专家提示 你可以在试图关闭连接之前检查对象的bufferedAmount特性,确定是否有些数据还没有从应用中发送到服务器。

protocol

客户端和服务器协议协商的结果可以在WebSocket对象上看到。protocol特性包含在打开握手期间WebSocket服务器选择的协议名,换句话说,protocol特性告诉你特定WebSocket上使用的协议。protocol特性在最初的握手完成之前为空,如果服务器没有选择客户端提供的某个协议,该特性保持空值。

extensions

WebSocket 的另一个新增功能是扩展。利用扩展,可以发送压缩帧、多路复用帧等。您可以检查 open 事件后的 WebSocket 对象的 extensions 属性,查找服务器所接受的扩展。

onclose,onopen,onerror

这三个事件在连接生命周期的不同阶段触发。

open//在成功建立连接时触发
error//在发生错误时触发,连接这时是断开的
close//连接关闭时触发

需要注意的是websocket不支持dom2级事件监听器,因此必须使用dom0级语法分别定义每个事件处理程序。如:

sockket.onclose = function(event) {
    console.log(event)
    event.wasClear :boolean //是否明确关闭
    event.code    //服务器返回的数值状态码
    event.reason  //服务器发回的消息
}

这三个事件中只有close事件的event有额外信息。它有三个额外属性,各属性值如上方注释。

onmessage

当接收到服务器发来的消息时会触发该事件

socket.onmessage = function(event) {
    var data = event.data;
    ...
}

send,close

send方法是客户端发送信息的命令。

var message = {
    name:'xiaoqiang',
    age:1
}
socket.send(JSON.stringify(message));

close是客户端关闭连接的命令

socket.close();

调用close方法后,readystate也会相应变化。

需要注意的是websocket的send方法和onmessage中的数据都是字符.串,使用时按需调用JSON.parse和JSON.stringify。
至于没找到想看的就去看socket.io吧,其它方法都是插件封装的,原生语法只有这些。

你可能感兴趣的:(js)