Python实现WebSocket 您所在的位置:网站首页 u检验界值表怎么用 Python实现WebSocket

Python实现WebSocket

#Python实现WebSocket| 来源: 网络整理| 查看: 265

Python实现WebSocket 一、WebSocket建立连接

1. 握手环节

目的:验证服务端是否支持Websocket协议

流程:

客户端浏览器第一次访问服务器的时候,浏览器内部会自动生成一个随机字符串,将该随机字符串发送给服务端(基于http)协议)浏览器也保留随机生成的字符串(在请求头里面) 服务端接收随机字符串之后,会将字符串与magic string(全球统一)做字符串拼接,然后利用加密算法对拼接好的字符串进行加密处理(sha1/base64),此时客户端也对产生的随机字符串做上述的拼接和加密操作 接着服务器将产生好的随机字符串发送给客户端的浏览器(响应头里面),客户端浏览器会对比服务器发送的随机字符串与浏览器本地操作的随机字符串进行对比,如果一致说明该服务端支持websocket,如果不一致服务端则不支持。

请求协议

GET / HTTP/1.1\r\n # 请求首行,握手阶段还是使用http协议 Host: 127.0.0.1:8080\r\n # 请求头 Connection: Upgrade\r\n # 表示要升级协议 Pragma: no-cache\r\n Cache-Control: no-cache\r\n User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36\r\n Upgrade: websocket\r\n # 要升级协议到websocket协议 Origin: http://localhost:63342\r\n Sec-WebSocket-Version: 13\r\n # 表示websocket的版本。如果服务端不支持该版本,需要返回一个Sec-WebSocket-Versionheader,里面包含服务端支持的版本号 Accept-Encoding: gzip, deflate, br\r\n Accept-Language: zh-CN,zh;q=0.9,en;q=0.8\r\n Sec-WebSocket-Key: 07EWNDBSpegw1vfsIBJtkg==\r\n # 对应服务端响应头的Sec-WebSocket-Accept,由于没有同源限制,websocket客户端可任意连接支持websocket的服务。这个就相当于一个钥匙一把锁,避免多余的,无意义的连接 Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n\r\n Sec-WebSocket-Key 是一个 Base64 encode 的值,这个是浏览器随机生成的,发送给服务器 服务端从请求(HTTP的请求头)信息中提取 Sec-WebSocket-Key,利用magic_string 和 Sec-WebSocket-Key 先进行拼接,然后采用hmac1加密,再进行base64加密 将加密结果响应给客户端,服务器会返回下列东西,表示已经接受到请求, 成功建立 WebSocket

响应协议

HTTP/1.1 101 Switching Protocols\r\n # 响应首行,还是使用http协议 Upgrade:websocket\r\n # 表示要升级到websocket协议 Connection: Upgrade\r\n # 表示要升级协议 Sec-WebSocket-Accept: 07EWNDBSpegw1vfsIBJtkg==\r\n # 根据客户端请求首部的Sec-WebSocket-Key计算出来。 WebSocket-Location: ws://127.0.0.1:8000\r\n\r\n

2. 收发数据(send/onmessage)

验证成功之后就可以数据交互了 但是交互的数据是加密的 需要解密处理

数据基于网络传输都是二进制格式,单位换算 8bit = 1bytes 步骤一:读取第二个字节的后七位称之为payload,根据payload大小决定不同的处理方式: =127 再读取8个字节 作为数据报 =126 再读取2个字节 作为数据报


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有