ice

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这么广泛。

猜你喜欢

转载自blog.csdn.net/hfutzhu/article/details/6130883
ice