ICE是網絡通訊引擎縮寫,前幾個項目中有用到,用起來方便順手。 服務器
想到讀書時學習毛主席寫的《星星之火能夠燎原》,其中這句寫的很是好:"咱們看事情必需要看它的實質,而把它的現象只看做入門的嚮導,一進了門就要抓住它的實質,這纔是可靠的科學的分析方法。"。老人家確實厲害。想一想咱們從事軟件研發的,也會遇到各類技術框架,還沒開始用就想着去讀源碼,仍是有點不科學了,檢討咱們這個行業仍是要戒驕戒躁,可以踏踏實實的纔好。否則總有動嘴的比動手的看起來混的好。(關於動嘴的不是貶義,在什麼是領導的思考的博客中會有說明。) 網絡
繼續回到ICE使用上來,這裏先拉個遠程打印的例子,網上關於ICE最廣泛的例子,我這裏作寫小改動。 框架
#ifndef PRINTER_TEST_H ide
#define PRINTER_TEST_H 學習
module com{ spa
module xue{ .net
module gang{ server
module print{ 對象
interface Printer{ 接口
void print(string mesg);
};
};
};
};
};
#endif
只定義了一個print方法。
用slice2Java命令映射成Java文件
黃色爲接口,紫色爲類;生成了不少文件,但咱們須要關心的只有:
服務端生成類:
客戶端生成類:
>1>在服務端實現: _PrinterDisp 文件, *Disp 文件
>2>客戶端的: PrinterPrx 文件, *Prx文件,並非嚴格劃分,如傳引用是*prx文件也在服務端構建。
實現_PrinterDisp 中print未實現的方法
package com.jd.jcloud.op.printer.server;
import Ice.Current;
import com.xue.gang.print._PrinterDisp;
public class PrinterImpl extends _PrinterDisp {
@Override
public void print(String mesg, Current __current) {
System.out.println(mesg);
}
}
能夠發現Servant是一個一個的實現邏輯模塊。
怎麼把Servant模塊,裝入ICE框架,客戶端請求後,可以定位到,並調用相應的方法。如代碼所示:
1.建立Communicator對象
2.經過Communicator對象獲取adapter容器
3.實例化Servant對象(PrinterImpl)
4.把Servent對象加入adapter容器中,而且惟一一個鍵值
5.激活adapter容器中的對象
6.Communicator服務直到關閉
客戶端根據參數建立到服務端的鏈接,並與客戶端確認找到對應的Servant。
>1>checkedCast 方法 與服務端交互,檢查是否返回對應的類型,若是不是返回uull;
>2>uncheckedCast方法不與服務端交互,直接返回;
看起來這兩個方法有路由的功能(待確認..)
1.建立Communicator鏈接
2.經過IP &Port等參數獲取到ObjectPrx對象
3.調用checkedCast方法和服務器確認ObjectPrx是不是但願的類型。
4.若是類型正確,調用服務器上Servant的實現方法。