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 抽象图


相关文章
相关标签/搜索