ICE学习笔记一

每天都在用ICE,确又老是忘记,今天开始,把每次遇到的问题记录下来,免得每次碰到同样的问题去度娘、谷歌老半天。
先记录一段最简单的ICE进程间通讯实例(整理自ice开发指南),只针对java开发语言

实现目标:客户端进程像服务端进程发送一个hello world字符串,服务端收到之后在控制台打印出来

1.定义slice(Printer.ice),如下:
[["java:package:com.hydb.ice.intf"]]
module demo{
interface Printer{
void printString(string s);
};
};

注:上面的定义作为进程间通讯的接口描述文件,通过slice2java把定义转译成java接口文件,slice2java的使用方式大致如下:
$ mkdir generated
$ slice2java --output-dir generated Printer.ice
如果用eclipse编译器,安装一个插件就更简单了

2.服务端实现

public class PrinterServer {

public static void main(String[] args) {
int status = 0;
Ice.Communicator ic = null;
try{
ic = Ice.Util.initialize(args);
Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("PrinterAdapter",
"default -p 1000");
Ice.Object object = new PrinterI();
adapter.add(object,ic.stringToIdentity("printer"));
adapter.activate();
ic.waitForShutdown();
}catch(Exception e){
e.printStackTrace();
status = 1;
}
if(ic != null){
ic.destroy();
}
System.exit(status);
}
}

3.客户端实现

public class PrintClient {

public static void main(String[] args) {
int status = 0;
Communicator ic = null;
try{
ic = Ice.Util.initialize(args);
ObjectPrx basePrx = ic.stringToProxy("printer:default -p 1000");

PrinterPrx printer = PrinterPrxHelper.checkedCast(basePrx);
if(printer == null)
throw new RuntimeException("Invalid proxy");
printer.printString("hello world");
}catch(Exception e){
status = 1;
e.printStackTrace();
}
if(ic != null){
try{
ic.destroy();
}catch(Exception e){}
}
System.exit(status);
}
}


4.验证
启动服务端,再启动客户端,就可以在服务端控制台输出 hello world

你可能感兴趣的:(进程间通讯框架)