#Gaea协议java
##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的代码实现加密
协议的实现比较简单,这里就从代码结构上简单了解一下server
CompressBase.java 是压缩的虚工厂类,其中包含两种压缩算法,一种是不压缩,一种是sevenZip压缩算法。从sevenZip的实现中能够看出,压缩功能并无实现接口
在exception包中Gaea定义了不少种Gaea框架中使用到的异常类ip
其中包括ResponseProtocol,RequestProtocol,ExceptionProtocol,HandclaspProtocol,ResetProtocol;其中并无协议定义中的Config;其中每一个消息体类型的结构,具体看代码就能够了get
包括GaeaSerialize和JSONSerialize两种,从代码中能够看出来JSONSerialize并不支持。若是须要支持,实现其接口就行,应该比较容易扩展
主要定义了一些类型,和数字进行对应。
实现主要的协议建立和解析的功能; 其中SCFStruct中定义了每一个字段的长度。
提供协议须要使用的一些工具,好比int转byte[],char转byte[]等等。
对于Gaea使用到的注解的定义,主要是标记接口,实现,接口方法等。其具体的意义,可在Gaea的使用中看到
提供Base64,DES加密算法的工具包
###le284