IMC-SDK
Instant Message Communication 開發工具包
作為即時通信軟件的底層通信功能被獨立分隔出來,同樣也可以以用于其他的通信需求.
IMC從ACE和ICE吸收優秀的概念和技術,通信處理不免都是C/S的模式,一頭請求,另外一頭接收處理并返回處理結果. 同Ice一樣,所有操作都
被視為遠程調用RPC。
不同的應用需求,在設計開發時,我們將定義無數的數據類型影射到應用模型對象,并被序列化傳輸到遠端,這些編碼工作無疑是容易出錯的,并且是令人沮喪的。既然是RPC的一種實現,IDL是好的中間語言,所有的應用模型都可以定義在IDL,通過slice工具將其翻譯到不同的實現語言,slice將處理好數據對象的Marshalling&UnMarshalling等工作。
IMC與ICE的相同:
采用一致的數據類型(int,byte,short,long,float,double,string)
一致的通信協議定義,參考ice1.3文檔
支持同步和異步調用;支持oneway調用
支持參數的out
IMC與ICE不同之處:
IMC 不支持class;接口不能被當作參數傳遞;
支持Tcp和UDT通信方式,tcp和udt的連接(connection)上進行雙向的Rpc調用(Ice一般在一個連接上是單向的)。
調用的返回:
1.
同步調用:
1.1. 接收到返回結果
1.2. 超時(timeout調用時)
1.3. 連接(connection)斷開
1.4. 系統結束處于終止清理階段(將刪除所有的connection)
2.
異步調用:
即可返回
函數序列化(operator):
參數支持IN,OUT類型,但不支持 INOUT類型,且OUT類型必須在IN之后被定義(同ice)。每個函數(operator)都將有一個僅對于interface內的索引編號(integer),參數將被置于參數棧(ParameterStack).
字節流到函數參數時,先從包內找出此次調用接口的類型,根據函數編號找到解析此參數棧的函數,并將剩余的字節流傳遞到以上函數去解析
Struct OperatorMap{
Int
index;
String
name;
Void
decode(ByteArray& bytes);
};
Class Security{
Virtual string close(int reason);
Friend __security_decode_close;
}
Static __security_decode_close(ByteArray&
bytes, void* obj);
OperatorMap __omap_security={0,”close”,__security_decode_close};
//解碼字節到函數參數,并最終調用Rpc函數
//以下代碼自動生成
ParameterStack __security_decode_close(ByteArray&
bytes, void* obj){
Security
* sec = (Security*)obj;
Parameter
p;
ParameterStack
pstack;
P = unMarshallingParameter(bytes,”int”);
Int reason = p;
P
= Sec->close(reason);
Pstack.push(p);
Return
pstack;
}