zoukankan      html  css  js  c++  java
  • websocket简单理解

    • 实现及原理

    Websocket是一种在单个TCP连接上进行全双工通讯的协议。 WebSocket 首先发起一个 HTTP 请求,在请求头加上 `Upgrade` 字段,该字段用于改变 HTTP 协议版本或者是换用其他协议,这里我们把 `Upgrade` 的值设为 `websocket` ,将它升级为 WebSocket 协议

    • 如何建立通信

    握手过程: websocket-client端通过ws协议向websocket-server端发起连接请求前,首先在自己的请求头中添加Sec-Websocket-Key键值对,值为根据自己账号通过一定的方式生成的字符串,client端发送自己的key后,server端取出并保存该字符串后,将该字符串与魔法字符串拼接后先后经过sha1、base64加密后获得与此client端的通信密钥保存并发送给client端,client端在本地保存此通信密钥,此时server端与client端完成握手。

    通信过程(解密): server端或client端在收到加密信息(字节类型)后,将加密信息的第二个字节与127进行与位运算,根据位运算的结果分为=127、=126、<=125三种情况,根据不同的位运算结果分别取出其掩码(mask)部分和数据部分,将掩码部分与数据进行^(异或)运算即得到真实的数据(字节类型),根据编码类型进行解码后即得到可读性的数据。

    通信过程(加密):

     

    import struct
        msg_bytes = "hello".encode("utf8")
        token = b"x81"
        length = len(msg_bytes)
        if length < 126:
            token += struct.pack("B", length)
        elif length == 126:
            token += struct.pack("!BH", 126, length)
        else:
            token += struct.pack("!BQ", 127, length)
        msg = token + msg_bytes
        print(msg)

     

  • 相关阅读:
    Demystifying Delegates
    Events
    存储过程与SQL语句的恩怨情仇 转载于-懒人居
    在ASP.NET中实现简单的URL重写
    C#基础概念二十五问
    Asp.Net结合JS在图层上显示记录信息 (转载于海东的技术资料的blog)
    debian 删除SWAP分区后启动报错笔记
    Log4net日志记录开源组件的初级使用
    股票API之新浪财经频道
    .Net Remoting && Web Service && WCF
  • 原文地址:https://www.cnblogs.com/huangqihui/p/10675073.html
Copyright © 2011-2022 走看看