之前曾有php版的websocket封装包,见Websocket——php实战,最近使用python做一些功能,需要用到对websocket的操作,因此,参照之前的实现,实现了这个python版本。源码见https://github.com/OshynSong/wspy。
整体实现起来,需要在建立socket监听端口,这需要用到socket标准库模块;之后,需要对对网络字节流进行操作,这个方面python有struct标准库模块,这个非常好用;另外涉及到加密解密操作,还有hashlib模块和sha模块等使用。特别在此总结一下,目的主要是
1 备忘
2. 总结与思考
1 socket 操作
1 本地Socket建立
建立TCP服务器的一般流程:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((addr,port))
sock.listen(10)
建立好本地socket,并绑定地址与端口进行监听。
2 并发连接策略
之后,需要使用不同的策略处理多个客户端连接的问题,最普通的处理方式就是直接使用accept阻塞,这样服务器端每次只能处理一个客户端连接。然后python标准库提供了select模块,里面有select、poll和epoll这些不同的并发连接的处理策略。其中poll和epoll只能在linux下使用,而且epoll在linux 2.6之后的版本才能使用。当然并发处理效果来看,epoll比poll性能更好,poll比select性能更优。但是select确可以在多种平台下使用,为了兼容Windows系统,本次实现中使用的是select策略,具体如下:
... #接上述socket建立代码
while True:
rs, ws, es = select.select([sock], [], [])
for r in rs:
if r is sock: #r