ice提供了类似corba的功能,其网址为http://www.zeroc.com/ice.html,现在已经支持C++, Java, .NET, Python, PHP, Ruby, and Objective-C语言。
一个简单的服务端的例子:
首先定义个ice文件:
module YD{
sequence<float> datasqu;
sequence<int> equlist;
struct equdata{
string datatime;
datasqu dataarr;
};
sequence<equdata> equsqdata;
interface DataInter{
string getDataByID(int id);
string getDataByIDList(equlist el);
equsqdata getAllData();
};
};
使用ice2cpp/ice2java等生成框架代码,其中会生成一个DataInter的接口,我们在是服务端自己去实现这个接口
服务端:(c++)
class DataInterI :public DataInter{
public:
virtual std::string getDataByID(Ice::Int i, const Ice::Current&);
virtual YD::equsqdata getAllData(const Ice::Current&);
virtual std::string getDataByIDList(const YD::equlist& el, const Ice::Current&);
};
main函数中
int main(int argc,char* argv[]){
int status =0;
Ice::CommunicatorPtr ic;
try{
ic = Ice::initialize(argc,argv);
Ice::ObjectAdapterPtr adapter = ic->createObjectAdapterWithEndpoints("DataServiceAdaper","default -p 5000");
Ice::ObjectPtr object = new DataInterI(conn);
adapter->add(object,ic->stringToIdentity("DataService"));
adapter->activate();
ic->waitForShutdown();
}catch(const Ice::Exception& e){
cerr << e << endl;
}catch(const char* msg){
cerr<<msg<<endl;
}
if(ic){
try{
ic->destroy();
}catch(const Ice::Exception& e){
cerr << e << endl;
status = 1;
}
}
return status;
}
客户端JAVA的实现
public static void main(String[] args) {
int status =0;
Ice.Communicator ic ;
try{
ic = Ice.Util.initialize(args);
Ice.ObjectPrx base = ic.stringToProxy("DataService:default -h 127.0.0.1 -p 5000");
YD.DataInterPrx dp = YD.DataInterPrxHelper.checkedCast(base);
if(printer == null)
throw new Error("Invalid proxy");
for(int j =0;j<200000;j++){
long begin = System.currentTimeMillis();
tmpxx = dp.getDataByIDList(equ);//这个是调用
System.out.println(tmpxx);
long end = System.currentTimeMillis();
System.out.println(end-begin+" second");
Thread main = Thread.currentThread();
main.sleep(1000);
}
if(ic !=null){
try{
ic.destroy();
}catch(Exception e){
e.printStackTrace();
}
}
}catch(Ice.LocalException e){
e.printStackTrace();
status = 1;
return;
}catch(Exception e){
e.printStackTrace();
return;
}
}
}
更多的参见主页的文档,感觉ICE用的很少,没有corba这么广泛。