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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值