基于websocket和Python的在线聊天室
一、什么是WebSocket API
二、WebSocket协议
GET /chat HTTP/1.1 Upgrade: WebSocket Connection: Upgrade Host: www.zendstudio.net:9108 Origin: http://www.zendstudio.net Cookie: somenterCookie
HTTP/1.1 101 Web Socket Protocol Handshake Upgrade: WebSocket Connection: Upgrade WebSocket-Origin: http://www.zendstudio.net WebSocket-Location: ws://www.zendstudio.net:9108/chat
从这里我们太容易看出来,websocket协议的握手部分根本就是个类http的协议,所不同的是http每次都会有这样子的头信息交互,这在某些时候不得不显得很糟糕。而websocket只会执行一次这个过程,之后的传输信息就变得异常简洁了。
握手协议:request中有三个随机的key值,头部有两个,后面body里是长度为8字节的key3(括号里的文字是提示,还有字符间的冒号也是为了看上去清晰才加上的,真正传输是没有的),以此向server发送一个challenge,server需要根据这三个key计算出一个token,在响应中发回给client,以证明自己对request的正常解读。计算方法是这样的:对于key1,抽取其中的数字字符,形成一个整数num,然后除以他自身的空格数spaces,保留整数部分i1; key2如法炮制,得到i2,把i1和i2按照big-endian字符序连接起来,然后再与key3连接,得到一个初始的序列,对这个序列使用md5计算出一个16字节长的摘要,就是所需的token。另外值得注意的是Origin头部,意味着Websocket是支持cross origin的。
三、在线聊天室代码(客户端)
四、在线聊天室代码(python 服务器端)
运行效果: