Websocket属于HTML5规范,是下一代客户端服务器的异步通讯方法。可以用来替换Ajax。Ajax需要从客户端发起请求,但是Websocket对于客户端和服务器可以彼此互相推送消息,即全双工通信。但一开始需要HTTP请求完成握手。
参考这里:http://www.cnblogs.com/smark/archive/2012/11/26/2789812.html
浏览器连接请求:
GET / HTTP/1.1
Connection:Upgrade
Host:127.0.0.1:8088
Origin:null
Sec-WebSocket-Extensions:x-webkit-deflate-frame
Sec-WebSocket-Key:puVOuWb7rel6z2AVZBKnfw==
Sec-WebSocket-Version:13
Upgrade:websocket
服务端接收请求后主要是成针对Sec-WebSocket-Key生成对就Sec-WebSocket-Accept 的key,生成Sec-WebSocket-Accept 值比较简单就是Sha1(Sec-WebSocket-Key+258EAFA5-E914-47DA-95CA-C5AB0DC85B11)即可。
Python代码如下:
import hashlib
from base64 import b64encode,b64decode
key = 'puVOuWb7rel6z2AVZBKnfw=='
token = b64encode(hashlib.sha1(str.encode(str(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'))).digest())
return_key=bytes.decode(token)
服务器返回:
HTTP/1.1 101 Switching Protocols
Connection:Upgrade
Server:beetle websocket server
Upgrade:WebSocket
Date:Mon, 26 Nov 2012 23:42:44 GMT
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:content-type
Sec-WebSocket-Accept:FCKgUr8c7OsDsLFeJTWrJw6WO8Q=
经过服务器的返回处理后连接握手成功,后面就可以进行TCP通讯.WebSocket在握手后发送数据并象下层TCP协议那样由用户自定义,还是需要遵循对应的应用协议规范.
数据交互协议: