websocket简单理解
2024-10-18 14:56:49
- 实现及原理
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)
最新文章
- 理解 OpenStack 高可用(HA)(1):OpenStack 高可用和灾备方案 [OpenStack HA and DR]
- Python之路----------random模块
- 我的PhoneGap安装配置经历
- css布局之两列布局
- logging日志模块
- 基本hibernate DEMO
- Linux内核学习笔记: uid之ruid,euid,suid
- Hive 1、什么是Hive,Hive有什么用
- 使用disqus搭建comment时一件非常二的事
- 网页被Chrome识别成英语,区域,语言,网站
- python定制类(以Fib类为例)
- jquery ajax请求成功,数据返回成功,seccess不执行的问题
- 强推一款开源集成开发环境——Geany
- 基于Windows下浏览器无法正常打开的解决方案
- Java8之Lambda表达式基础
- hive:某张表进行分页
- table中的一些另类标签
- Unity 协同程序
- python自动化开发-[第十四天]-javascript(续)
- Servlet(8)—GenericServlet和改进Servlet实例