zoukankan      html  css  js  c++  java
  • websocket浅析

    HTML5 WebSocket

    • 允许服务端主动向客户端发送数据

    • 浏览器和服务器只需完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输

    • 节省服务器资源和带宽,实现更实时的通讯

    创建websocket
    • 第一个参数为目标路径

    • 第二个参数为可选参数,可以是字符串或数组,用来表示子协议,这样可以让一个服务器实现多种websocket子协议

    var ws = new WebSocket([url],[option])
    实例对象的方法
    • send():接收一个String|ArrayBuffer|Blob数据,发送到客户端

    • close():客户端主动断开连接

      • 第一个参数可选,为关闭状态号,默认1000

      • 第二个参数可选,字符串类型,表示断开原因

    表示连接状态的常量
    • WebSocket.CONNECTING 0 连接还没开启

    • WebSocket.OPEN 1 连接已开启并准备好进行通信

    • WebSocket.CLOSING 2 连接正在关闭的过程中

    • WebSocket.CLOSED 3 连接已关闭,或者连接无法建立

    • 通过readyState属性来判断当前状态

    事件监听
    • open:连接已建立-----OPEN

    • message:接收到消息,回调函数中收到messageEvent数据,其中messageEvent.data为消息信息

    • closed:连接关闭--CLOSED

    • error:建立和连接过程中发生错误

    事件监听方式和数据解析
    • 可以对on[事件]直接赋值

      • ws.onopen = function(){alert('连接成功')}
    • 也可以使用addEventListener监听事件

      • ws.addEventListener('open', funtion(){})
    • 不论是服务端还是客户端,其接收到的都是序列化后的字符串,很多时候需要通过JSON.parse(e.data)解析

    连接稳定性
    • 某些情况下出现断开连接或连接出错时,需要在erroropen中进行监听非正常断开并重连

    • open后开启一个定时任务去判断当前readyState,在出现异常情况下尝试重连

    心跳
    • WebSocket中规定了心跳机制,一方通过发送ping(opcode 0x9)消息给另一方,另一方收到ping后应尽可能快的返回pong(0xA)

    • 用来检测连接的对方在线状态。因此如果没有心跳,那么没有办法判断对方的连接状态,就会断开连接

    建连阶段
    • 借助于HTTP

    • 部分请求头意义

      • Connection:Upgrade : 表示要升级协议

      • Upgrade:websocket: 表示要升级到websocket协议

      • Sec-WebSocket-Version: websocket版本

      • Sec-WebSocket-Key:是一个Base64 encode的值,由浏览器随机生成,与服务端响应头中的Sec-WebSocket-Accept配套

    • 部分响应头意义

      • 状态码101 :表示切换协议

      • UpgradeConnection用于回复客户端已经切换协议成功

  • 相关阅读:
    RequireJS 模块化加载框架使用
    MySQL数据类型(最大值 和 最小值)
    utf-8的中文是一个字符占几个字节
    spring的事务是什么?与数据库的事务是否一样
    事务和锁机制是什么关系? 开启事务就自动加锁了吗?
    关于数据库主键和外键
    浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景
    TCP/IP协议
    分库分表分区需要考虑的问题及方案
    Redis(十一):Redis的事务功能详解
  • 原文地址:https://www.cnblogs.com/ashen1999/p/12693551.html
Copyright © 2011-2022 走看看