Websocket

2019-02-15  本文已影响14人  小懒豆

客户端(浏览器)

var Socket = new WebSocket(url, [protocol] )
第一个参数 url, 指定连接的 URL。
第二个参数 protocol 是可选的,指定了可接受的子协议。

属性 只读 描述
readyState 只读属性 readyState 表示连接状态,可以是以下值:
     0 - 表示连接尚未建立。
     1 - 表示连接已建立,可以进行通信。
     2 - 表示连接正在进行关闭。
     3 - 表示连接已经关闭或者连接不能打开。
bufferedAmount 只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。
url WebSocket 的绝对路径
protocol 服务器选择的下属协议
事件 事件处理程序 描述
open Socket.onopen 连接建立时触发
message Socket.onmessage 客户端接收服务端数据时触发
error Socket.onerror 通信发生错误时触发
close Socket.onclose 连接关闭时触发
方法 描述
Socket.send() 使用连接发送数据
Socket.close() 关闭连接

服务端(Node ws包)

Class: WebSocket.Server

new WebSocket.Server(options[, callback])

1. verifyClient {Function} (默认自动接受),如果设置该函数则,则该函数会接受如下两个参数:

info {Object}
    origin {String}   `HTTP.request.header['Origin']`
    req {http.IncomingMessage} GET  `HTTP.request`
    secure {Boolean} 如果设置了Req.Calnal.授权或Req.Calnal.加密,则为true。
cb {Function} 当用户需要定制拒绝回调信息时使用,该回调可传如下参数:
    result {Boolean} 是否接受握手
    code {Number} 当`result`为`false`时,该值为指定返回的http错误状态码
    name {String} 当`result`为`false`时,该值为指定返回的http错误信息
    headers {Object} 当`result`为`false`时,该值可以设定附加的额外头部信息
// 接受
verifyClient:function(info,cb){
    cb(true);
}

// 拒绝
verifyClient:function(info,cb){
    cb(false,403,'Site access denied',{'Retry-After': 120});
}

2. handleProtocols {Function} 处理子协议的函数。函数注入参数如下:

protocols {Array} ```HTTP.request.header['Sec-WebSocket-Protocol']```
request {http.IncomingMessage} GET```HTTP.request```

如果函数返回true则会在响应中设置header['Sec-WebSocket-Protocol']
忽略该项则使用HTTP.request.header['Sec-WebSocket-Protocol']第一个值

3. perMessageDeflate {Boolean|Object} 压缩扩展(默认:false)

     serverNoContextTakeover {Boolean} Whether to use context takeover or not.
     clientNoContextTakeover {Boolean} Acknowledge disabling of client context takeover.
     serverMaxWindowBits {Number} The value of windowBits.
     clientMaxWindowBits {Number} Request a custom client window size.
     zlibDeflateOptions {Object} [deflate options](http://nodejs.cn/api/zlib.html#zlib_class_options)
     zlibInflateOptions {Object} [inflate options](http://nodejs.cn/api/zlib.html#zlib_class_options)
     threshold {Number} 小于该值的有效载荷将不会被压缩。默认为1024字节。
     concurrencyLimit {Number} 并发数限制,默认:10。详情请参阅此问题。

如果属性为空,则使用提供的配置或默认值。当发送分段消息时,将第一片段的长度与阈值进行比较。这就决定了是否对整个消息使用压缩。
注:其实关于压缩使用了node zlib模块 参考地址

事件 事件参数 描述
close 无参数 服务器关闭时触发
message socket {WebSocket} socket连接句柄
request {http.IncomingMessage} GETHTTP.request
成功握手连接时触发
error Error对象 通信发生错误时触发
listening 无参数 绑定端口时触发
属性 描述
clients {Set} 存储所有连接客户端的集合。请注意,只有在客户端跟踪是truthy时才添加此属性。
方法 描述
address()
close([callback]) 关闭http服务器并终止所有客户端
handleUpgrade(request, socket, head, callback) 处理websocket升级请求 noServer模式下必须手动调用该函数
shouldHandle(request) 处理websocket升级请求 noServer模式下必须手动调用该函数
request {http.IncomingMessage} GET```HTTP.request```
socket {net.Socket} ```net.Socket```
head {Buffer} 升级后的第一个数据包
callback {Function} 如果升级成功,调用回调将以WebSoCult对象作为参数调用。
上一篇下一篇

猜你喜欢

热点阅读