IMC-SDK
Instant Message Communication 開發(fā)工具包
作為即時(shí)通信軟件的底層通信功能被獨(dú)立分隔出來(lái),同樣也可以以用于其他的通信需求.
IMC從ACE和ICE吸收優(yōu)秀的概念和技術(shù),通信處理不免都是C/S的模式,一頭請(qǐng)求,另外一頭接收處理并返回處理結(jié)果. 同Ice一樣,所有操作都
被視為遠(yuǎn)程調(diào)用RPC。
不同的應(yīng)用需求,在設(shè)計(jì)開發(fā)時(shí),我們將定義無(wú)數(shù)的數(shù)據(jù)類型影射到應(yīng)用模型對(duì)象,并被序列化傳輸?shù)竭h(yuǎn)端,這些編碼工作無(wú)疑是容易出錯(cuò)的,并且是令人沮喪的。既然是RPC的一種實(shí)現(xiàn),IDL是好的中間語(yǔ)言,所有的應(yīng)用模型都可以定義在IDL,通過slice工具將其翻譯到不同的實(shí)現(xiàn)語(yǔ)言,slice將處理好數(shù)據(jù)對(duì)象的Marshalling&UnMarshalling等工作。
IMC與ICE的相同:
采用一致的數(shù)據(jù)類型(int,byte,short,long,float,double,string)
一致的通信協(xié)議定義,參考ice1.3文檔
支持同步和異步調(diào)用;支持oneway調(diào)用
支持參數(shù)的out
IMC與ICE不同之處:
IMC 不支持class;接口不能被當(dāng)作參數(shù)傳遞;
支持Tcp和UDT通信方式,tcp和udt的連接(connection)上進(jìn)行雙向的Rpc調(diào)用(Ice一般在一個(gè)連接上是單向的)。
調(diào)用的返回:
1.
同步調(diào)用:
1.1. 接收到返回結(jié)果
1.2. 超時(shí)(timeout調(diào)用時(shí))
1.3. 連接(connection)斷開
1.4. 系統(tǒng)結(jié)束處于終止清理階段(將刪除所有的connection)
2.
異步調(diào)用:
即可返回
函數(shù)序列化(operator):
參數(shù)支持IN,OUT類型,但不支持 INOUT類型,且OUT類型必須在IN之后被定義(同ice)。每個(gè)函數(shù)(operator)都將有一個(gè)僅對(duì)于interface內(nèi)的索引編號(hào)(integer),參數(shù)將被置于參數(shù)棧(ParameterStack).
字節(jié)流到函數(shù)參數(shù)時(shí),先從包內(nèi)找出此次調(diào)用接口的類型,根據(jù)函數(shù)編號(hào)找到解析此參數(shù)棧的函數(shù),并將剩余的字節(jié)流傳遞到以上函數(shù)去解析
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};
//解碼字節(jié)到函數(shù)參數(shù),并最終調(diào)用Rpc函數(shù)
//以下代碼自動(dòng)生成
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;
}