一、说明
1.1 背景说明
前段时间同事说云平台通信使用了个websocket的东西,今天抽空来看一下具体是怎么个通信过程。
从形式上看,websocket是一个应用层协议,socket是数据链路层、网络层、传输层的抽像;从应用场合上看,websocket可以使用javascript实现,而socket不能用javascript实现(真不能吗?我不太确定);从实际效果上看,和一般的socket连接用起来没什么区别。
我们知道http是短连接的,反复建立和销毁连接比较耗费资源,另外http协议经常头部内容比主体内容还长也比较浪费资源;websocket可以认为就是一个内容使用载荷固定格式的socket长连接。
websocket基本协议格式如下,更多说明见RFC 6455:
1.2 环境说明
当前环境我使用Python3+WebSockets库,WebSockets直接使用pip安装即可:
pip install websockets
二、代码实现
长连接是有状态的,所以一般在且只在最开始进行一次身份认证,而后通信过程不需要认证信息。我们这里实现一个简单的用户名密码认证过程。长连接更多内容可参考“长连接与短连接的安全差异讨论”。
另外,注意把代码中的ip改成自己的。
2.1 python服务端代码
importasyncioimportwebsockets#检测客户端权限,用户名密码通过才能退出循环
async defcheck_permit(websocket):whileTr