客户端(浏览器)
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])
-
options {Object}
- host {String} 要绑定的服务器主机名
- port {Number} 要绑定的服务器端口
- backlog {Number} 挂起连接队列的最大长度.
- server {http.Server|https.Server} 一个预创建的HTTP/S服务器
- verifyClient {Function} 验证传入连接的函数。
- handleProtocols {Function} 处理子协议的函数。
- path {String} 只接受与此路径匹配的连接
- noServer {Boolean} 启用无服务器模式
- clientTracking {Boolean} 是否记录连接clients
- perMessageDeflate {Boolean|Object} 开启关闭zlib压缩(配置)
- maxPayload {Number} 最大消息载荷大小(bytes)
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} GET HTTP.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对象作为参数调用。
网友评论