美文网首页
02.WebSocket API - HTML5(JavaScr

02.WebSocket API - HTML5(JavaScr

作者: 哈哈大圣 | 来源:发表于2019-06-01 10:04 被阅读0次

    WebSocket API - HTML5(JavaScript)客户端API

    WebSocket并不只是在浏览器和服务器中通信,两个任何框架编写,支持WebSocket的应用程序都可以创建WebSocket连接进行通信。

    1). 创建WebSocket对象

    var connection = new WebSocket('ws://www.example.net/stocks/stream'); // 第一参数为请求的url
    var connection = new WebSocket('wss://secure.example.org/games/chess'); // SSL/TLS加密
    var connection = new WebSocket('ws://www.example.net/chat', 'chat'); // 第二个可选参数为字符串或者字符串数组,一个或者多个开发自定义的协议
    var connection = new WebSocket('ws://www.example.net/chat', {'chat.v1','chat.v2'});
    

    2). 使用WebSocket对象

    1. readyState 属性: 比如connection.readyState,表示WebSocket连接的状态,取值如下
      • WebSocket.CONNECTING: 值为0,表示正在建立连接
      • WebSocket.OPEN: 值为1,表示连接建立
      • WebSocket.CLOSE: 值为2,表示正在关闭连接
      • WebSocket.CLOSED: 值为3,表示连接已经关闭

    WebSocket没有onreadystatechange事假(无论发生啥都会被调用),这将迫使我们检查readState并决定接下来的操作

    if (connection.readyState == WebSocket.OPEN) { 
        /* do something */ 
    }
    

    3). WebSocket中的四种事件

    1. onopen事件

    readState从CONNECTING变为OPEN,及连接建立时触发的事件;只读的url、extension(服务器提供的拓展)、protocol(服务器选择的协议)对象属性将会被固定下来;传入的事件为一个标准的js事件,没有特殊的地方。

    connection.onopen = function(event) {
        alert('WebSocket连接已经建立')
    }
    
    1. onmessage事件【!】

    包含一个 data 属性;
    : 如果是文本消息,该属性就是字符串;
    : 如果是二进制消息,该属性默认为Blob数据(WebSocket的binaryType默认为blob);
    : 如果WebSocket的binaryType被设置为arraybuffer,该属性值为 ArrayBuffer

    通常在实例化WebSocket后应该立即设置binaryType属性,在需要修改的时候也可以修改该属性;

    var connection = WebSocket('ws://www.example.net/chat');
    connection.binaryType = 'arraybuffer';
    
    ... 
    
    connection.onmessage = function(event) {
        alert(event.data)
    }
    
    1. onerror事件

    只有出现客户端错误时触发,协议错误只会导致连接的关闭,包含一个data属性,错误对象,可以是任意类型的数据(通常是字符串信息)

    connection.onerror = function(event) {
        alert(event.data)
    }
    
    1. onclose事件

    readState从CLOSING变为CLOSED,及连接关闭时触发的事件;传入的事件有三个属性
    wasCleancodereason,可以根据这些信息报告一些非正常关闭的信息

    connection.onclose = function(event) {
        if (!event.wasClean) {
            alert(event.code + ': ' + event.reason) // code 为1000表示正常
        }
    }
    

    4). WebSocket消息的发送

    WebSocket发送消息send接收一个唯一的参数,这个参数类型如下

    1. 字符串
    2. Blob
    3. ArrayBuffer
    4. ArrayBufferView

    WebSocket的bufferedAmount属性表示之前的send调用还有多少数据需要发送,也就是之前还没有发送完的数据有多少,用此属性可以避免消息堆积。

    connection.onopen = function() {
        // 定时器
        var intervalId = window.setInterval(function() {
            if (connection.readyState != WebSocket.OPEN) {
                window.clearInterval(intervalId);
                return;
            }
            
            // 缓存数据全部发送之后
            if (connection.bufferedAmount == 0) {
                connection.send(updatedModelData);
            }
        }, 50)
    }
    

    5. WebSocket通信的关闭

    connection.close()
    
    // 第一个可选参数为关闭代码,默认1000;第二个可选参数为字符串表示关闭原因
    connection.close(1000, 'reason')
    

    相关文章

      网友评论

          本文标题:02.WebSocket API - HTML5(JavaScr

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