#Gaea协议
##protocol的整体构成
Gaea是自定义的二进制协议
版本号:默认为1;用于后续协议升级 协议总长度:整个协议的长度 序列号:SessionId 每次自加,当数值大于1024 * 1024 * 1024时重新赋值为1;客户端,服务端区分是哪一个请求 服务编号:客户端配置文件中serviceid;以后服务虚拟化使用,暂时没有用到 消息体类型:Response(1),Request(2),Exception(3),Config(4),Handclasp(5),Reset(6);根据不同的消息类型,做相应的处理 压缩算法:不压缩UnCompress(0),SevenZip(1), DES(2);暂时不支持压缩 序列化规则:JSON(1),JAVABinary(2),XML(3),GaeaBinary(4);暂时只有GaeaBinary一种序列化方式 平台号:Dotnet(0),Java(1),C(2);支持三种语言的客户端 消息主体
协议在发送的时候,在其头尾增加了分隔符。五个风格符同时出现,且顺序一定的概率及其小,因此此风格符是可用的。
编码 | 说明 |
---|---|
009 | tab |
010 | 换行键(line feed) LF |
013 | 回车键 CR |
017 | ctrl键 键盘控制码 |
018 | alt 键 键盘控制码 |
##protocol的代码实现
协议的实现比较简单,这里就从代码结构上简单了解一下
- compress 压缩算法
CompressBase.java 是压缩的虚工厂类,其中包含两种压缩算法,一种是不压缩,一种是sevenZip压缩算法。从sevenZip的实现中可以看出,压缩功能并没有实现
- exception 异常类
在exception包中Gaea定义了很多种Gaea框架中使用到的异常类
- sdp消息体类型
其中包括ResponseProtocol,RequestProtocol,ExceptionProtocol,HandclaspProtocol,ResetProtocol;其中并没有协议定义中的Config;其中每个消息体类型的结构,具体看代码就可以了
- serializer序列化类型
包括GaeaSerialize和JSONSerialize两种,从代码中可以看出来JSONSerialize并不支持。如果需要支持,实现其接口就行,应该比较容易扩展
- sfp.enumeration 枚举类型
主要定义了一些类型,和数字进行对应。
- sfp.v1 协议的创建和解析
实现主要的协议创建和解析的功能; 其中SCFStruct中定义了每个字段的长度。
- utility工具包
提供协议需要使用的一些工具,比如int转byte[],char转byte[]等等。
- server.contract.annotation注解的定义
对于Gaea使用到的注解的定义,主要是标记接口,实现,接口方法等。其具体的意义,可在Gaea的使用中看到
- secure加解密工具包
提供Base64,DES加密算法的工具包
###le284