#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