esp8266开发——使用micropython下的websocket
说明
- micropython的标准库中包含了websocket的代码,但是我没有测试
- 我直接修改了webrepl的部分关于websocket的代码,原版的代码里面是无法让chrome作为客户端连接的(在数据解包部分几乎没有实现)
- 仍然有很多websocket标准,比如分包传输等没有实现
代码
- websocket_helper.py 这个握手协议实现得非常简单
import sys
try:
import ubinascii as binascii
except:
import binascii
try:
import uhashlib as hashlib
except:
import hashlib
DEBUG = 0
def server_handshake(sock):
clr = sock.makefile("rwb", 0)
l = clr.readline()
webkey = None
while 1:
l = clr.readline()
if not l:
raise OSError("EOF in headers")
if l == b"\r\n":
break
h, v = [x.strip() for x in l.split(b":", 1)]
if DEBUG:
print((h, v))
if h == b'Sec-WebSocket-Key':
webkey = v
if not webkey:
raise OSError("Not a websocket request")
if DEBUG:
print("Sec-WebSocket-Key:", webkey, len(webkey))
respkey = webkey + b"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
respkey = hashlib.sha1(respkey).digest()
respkey = binascii.b2a_base64(resp