ICE使用【1】遠程打印

ICE是網絡通訊引擎縮寫,前幾個項目中有用到,用起來方便順手。 服務器

想到讀書時學習毛主席寫的《星星之火能夠燎原》,其中這句寫的很是好:"咱們看事情必需要看它的實質,而把它的現象只看做入門的嚮導,一進了門就要抓住它的實質,這纔是可靠的科學的分析方法。"。老人家確實厲害。想一想咱們從事軟件研發的,也會遇到各類技術框架,還沒開始用就想着去讀源碼,仍是有點不科學了,檢討咱們這個行業仍是要戒驕戒躁,可以踏踏實實的纔好。否則總有動嘴的比動手的看起來混的好。(關於動嘴的不是貶義,在什麼是領導的思考的博客中會有說明。) 網絡

繼續回到ICE使用上來,這裏先拉個遠程打印的例子,網上關於ICE最廣泛的例子,我這裏作寫小改動。 框架


1.1 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方法。


1.2 映射Java文件

 用slice2Java命令映射成Java文件


黃色爲接口,紫色爲類;生成了不少文件,但咱們須要關心的只有:


服務端生成類:


客戶端生成類:


>1>在服務端實現: _PrinterDisp  文件, *Disp 文件

>2>客戶端的: PrinterPrx 文件, *Prx文件,並非嚴格劃分,如傳引用是*prx文件也在服務端構建。


1.3 實現服務端的Servant 代碼

實現_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是一個一個的實現邏輯模塊。


1.4 實現服務器端


怎麼把Servant模塊,裝入ICE框架,客戶端請求後,可以定位到,並調用相應的方法。如代碼所示:


1.建立Communicator對象


2.經過Communicator對象獲取adapter容器


3.實例化Servant對象(PrinterImpl


4.Servent對象加入adapter容器中,而且惟一一個鍵值


5.激活adapter容器中的對象


6.Communicator服務直到關閉

參見:附件遠程打印服務端代碼

1.5實現客戶端

客戶端根據參數建立到服務端的鏈接,並與客戶端確認找到對應的Servant

>1>checkedCast 方法 與服務端交互,檢查是否返回對應的類型,若是不是返回uull;

>2>uncheckedCast方法不與服務端交互,直接返回;

看起來這兩個方法有路由的功能(待確認..


1.建立Communicator鏈接


2.經過IP &Port等參數獲取到ObjectPrx對象


3.調用checkedCast方法和服務器確認ObjectPrx是不是但願的類型。


4.若是類型正確,調用服務器上Servant的實現方法。


參見:附件遠程打印客戶端代碼 

1.6 抽象圖


相關文章
相關標籤/搜索