gfirefly 框架分析
数据包 协议 协议如下表 | HEAD_0 | ... | HEAD_3 | protoVersion | serverVersion | length | |--------|--------|--------|--------|--------|--------| | char | ... | char | int | int | int | gfirefly 框架是基于TCP协议的长连接,框架中 没有使用keep-alive ,那么网络异常断开(如网线突然拔掉)的时候,应用层是不知道,当我们自己使用的时候就必须加心跳包等机制来解决这个问题。另外数据加密没有放到协议层,那么需要加密数据只能在打包数据之前使用加密算法。 黏包 gfirefly中对底层的数据包进行了黏包处理,如上表所示,协议头定义了length,此时应用层就知道什么时候结束单个包的传输。见gfirefly/netconnect/protoc.py line 43: def dataReceived(self, data): length = self.factory.dataprotocl.getHeadlength()#获取协议头的长度 self.buff += data while self.buff.__len__() >= length: unpackdata = self.factory