websocket的底层实现原理

存在意义:服务端可以主动向客户端推送消息。

websocket本质实现:

  1. 浏览器向服务端发送一个连接的请求。 connect

  2. 服务端接受到连接。accept

  3. 浏览器向服务端发送字符串(遵循http协议的格式)
    GET /s?wd=alex Http1.1\r\nAccept-Encoding:gzip, deflate, br\r\nHost:www.baidu.com\r\nSec-WebSocket-Key:asdfsdfsdfsdfsdfsdf8sjhdfsdf\r\n\r\n

4 . 服务端接受到客户端的请求,并解析出来 “asdfsdfsdfsdfsdfsdf8sjhdfsdf”,然后得到密文的字符串
sha1(“asdfsdfsdfsdfsdfsdf8sjhdfsdf” + 258EAFA5-E914-47DA-95CA-C5AB0DC85B11) (magic string)
再讲密文的字符串返回给浏览器(遵循http协议的格式)
HTTP/1.1 101 Switching Protocols\r\nUpgrade:websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 密文\r\n\r\n

5 . 收发数据,存在数据加密
payload len:
<=125:报头 masking key 数据
=126:报头 masking key 数据
=127:报头 masking key 数据

位运算得到结果。

应用:

flask: geventwebsocket 
django: channels

猜你喜欢

转载自www.cnblogs.com/qq752059037/p/10458485.html