zoukankan      html  css  js  c++  java
  • websocket

     特点

    • 服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话
    • 建立在 TCP 协议之上,服务器端的实现比较容易。
    • 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
    • 数据格式比较轻量,性能开销小,通信高效
    • 可以发送文本,也可以发送二进制数据。
    • 没有同源限制,客户端可以与任意服务器通信。
    • 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

    API

    • 新建websocket实例
    var ws = new WebSocket('ws://localhost:8080');
    • readyState 返回实例对象的当前状态
    1. CONNECTING:值为0,表示正在连接。
    2. OPEN:值为1,表示连接成功,可以通信了。
    3. CLOSING:值为2,表示连接正在关闭。
    4. CLOSED:值为3,表示连接已经关闭,或者打开连接失败。
    switch (ws.readyState) {
        case WebSocket.CONNECTING:
        // do something
        break;
        case WebSocket.OPEN:
        // do something
        break;
        case WebSocket.CLOSING:
        // do something
        break;
        case WebSocket.CLOSED:
        // do something
        break;
        default:
        // this never happens
        break;
    }
    • onopen 用于指定连接成功后的回调函数。
    ws.onopen = function () {
        ws.send('Hello Server!');
    }
    // 如果要指定多个回调函数,可以使用addEventListener方法。
    ws.addEventListener('open', function (event) {
        ws.send('Hello Server!');
    });
    • onclose属性,用于指定连接关闭后的回调函数。
    ws.onclose = function(event) {
        var code = event.code;
        var reason = event.reason;
        var wasClean = event.wasClean;
        // handle close event
    };
    ws.addEventListener("close", function(event) {
        var code = event.code;
        var reason = event.reason;
        var wasClean = event.wasClean;
        // handle close event
    });
    • onmessage属性,用于指定收到服务器数据后的回调函数。
    ws.onmessage = function(event) {
        var data = event.data;
        // 处理数据
    };
        
    ws.addEventListener("message", function(event) {
        var data = event.data;
        // 处理数据
    });
    • send 法用于向服务器发送数据
    ws.send('your message');
    • onerror属性,用于指定报错时的回调函数。
    socket.onerror = function(event) {
        // handle error event
    };
        
    socket.addEventListener("error", function(event) {
        // handle error event
    });
    • bufferedAmount属性,表示还有多少字节的二进制数据没有发送出去。它可以用来判断发送是否结束。
    var data = new ArrayBuffer(10000000);
    socket.send(data);
    
    if (socket.bufferedAmount === 0) {
    // 发送完毕
    } else {
    // 发送还没结束
    }

     推荐好文:http://www.ruanyifeng.com/blog/2017/05/websocket.html

  • 相关阅读:
    Linux系统组成及初识
    Linux基础入门
    计算机和操作系统发展历史
    Swift,Objective-C,C,C++混合编程
    Objective-C数组和字典
    Java生成随机数字和字母组合10位数
    注册和登录
    IDEA的开发
    登录时@RequestBody报的错
    Java过滤特殊字符和表情
  • 原文地址:https://www.cnblogs.com/sghy/p/13529395.html
Copyright © 2011-2022 走看看