Websocket

作者: 小懒豆 | 来源:发表于2019-02-15 14:55 被阅读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])

    • 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} 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对象作为参数调用。
    

    相关文章

      网友评论

          本文标题:Websocket

          本文链接:https://www.haomeiwen.com/subject/ntteeqtx.html