zoukankan      html  css  js  c++  java
  • websocket 11

    1. websocket
    回顾:
    - 什么是轮训?
    - 通过定时器让程序每隔n秒执行一次操作。
    - 什么是长轮训?
    - 浏览器向后端发起请求,后端会将请求 hang 住,最多hang 30s。
    如果一直不返回数据:则最多等待30s,紧接着用户立即再发送请求。
    如果有数据返回:则操作数据并立即再发送请求。
    PS:后台可以使用队列或redis的列表来hang主请求。

    - 轮训和长轮训目的?
    由于Http请求是无状态、短连接所以服务端无法向客户端实时推送消息,
    所以,我们就是可以使用:轮训和长轮训去服务端获取实时数据。

    作业:基于redis和长轮询实现投票。

    websocket是一套类似于http的协议。
    扩展:
    http协议: 分割、请求头和请求体 分割、无状态、短连接。
    websocket协议: 分割、创建连接后不断开、 验证+数据加密;

    websocket本质:
    - 就是一个创建连接后不断开的socket
    - 当连接成功之后:
    - 客户端(浏览器)会自动向服务端发送消息,包含: Sec-WebSocket-Key: iyRe1KMHi4S4QXzcoboMmw==
    - 服务端接收之后,会对于该数据进行加密:
    base64(sha1(swk + magic_string))

    - 构造响应头:
    HTTP/1.1 101 Switching Protocols
    Upgrade:websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: 加密后的值
    WebSocket-Location: ws://127.0.0.1:8002

    - 发给客户端(浏览器)
    - 建立:双工通道,接下来就可以进行收发数据
    - 发送的数据是加密,解密,根据payload_len的值进行处理:
    - payload_len <=125
    - payload_len ==126
    - payload_len ==127
    - 获取内容:
    - mask_key
    - 数据
    根据mask_key和数据进行位运算,就可以把值解析出来。

    面试:
    a. 什么是websocket?
    websocket是给浏览器新建一套协议。协议规定:浏览器和服务端连接之后不断开,以此可以完成:服务端向客户端主动推送消息。
    websocket协议额外做的一些前天操作:
    - 握手,连接前进行校验
    - 发送数据加密

    b. websocket本质
    - socket
    - 握手,魔法字符串+加密
    - 加密,payload_len=127/126/<=125 -> mask key

  • 相关阅读:
    UML用例图
    Google Map API 文档
    chrome 使用各种搜索引擎的方法 GIS
    javaScript 获得触发事件的元素 支持IE FireFox GIS
    html 的路径 GIS
    JavaScript prototype GIS
    chromium 的资源管理 的grit GIS
    [原]使用ucenter最土团购整合DX2bbs的心得
    [转]sqlserver日期函数
    最土Ajax实现/json
  • 原文地址:https://www.cnblogs.com/wangkun122/p/9053583.html
Copyright © 2011-2022 走看看