网络编程—构建WebSocket服务

2018-07-19  本文已影响33人  励志摆脱懒癌的少女酱

websocket

  1. 简介
      websocket是在tcp上定义的独立的协议,相比http,其更接近于传输层协议,没有同源限制,实现浏览器和服务器全双工通信;其协议主要分为:握手数据传输 — http一定是请求和响应一一对应,而websocket连接建立后,后续数据以帧序列的形式传输;

    http交互图
    websocket交互图
  2. Web实时性
    (1)轮询机制

    • 定时轮询:客户端以一定的时间间隔像服务端发出请求,以频繁请求的方式保持客户端和服务器端的同步;
      • 缺点:当客户端以固定频率向服务端发起请求时,服务端的数据可能没有更新,这样造成很多无谓的网络传输,非常低效;
    • 长轮询(comet): 当服务器端没有数据更新的时候,连接会保持一段时间周期直到数据或状态改变时间过期
      * 目的:降低无效的网络传输,但当服务端的数据变更非常频繁的话,该机制和定时轮询在性能上差不多;
      (2)流技术
    • 流:在客户端的页面使用一个隐藏的窗口向服务端发出一个长连接的请求,服务端收到这个请求后做出回应并不断更新连接状态以保证客户端和服务器端的连接不过期;
      • 缺点:需要针对不同的浏览器设计不同的方案来改进用户体验;
        注:以上两种方案在每次客户端和服务端交互时都是一次HTTP请求和应答的过程:
      • 每一次HTTP请求和应答都带有完整的HTTP头信息,增加了每次传输的数据量;
      • 需要构造两个HTTP连接来模拟客户端和服务端之间的双向通信;


        长轮询

        (3)WebSocket:使用js调用浏览器的API发出一个WebSocket请求至服务器,经过一次握手,和服务器建立TCP通信;

      • 优点:
        • 只建立一个TCP连接,就可以主动推送数据到客户端;
        • 更轻量级的协议头,减少数据传送量;
          Websocket

websocket协议组成

  1. websocket握手:由http完成;
    (1)客户端建立连接时,通过http发起请求报文:

(2)数据帧的定义:一个字节8位;

eg:服务器端响应yakexi的报文:
fin(1)+res(000)+opcode(0001)+masked(0)+payload length(110000)+payload data(yakexi的二进制)

上一篇 下一篇

猜你喜欢

热点阅读