ICE安装及使用示例
ICE是什么
ZeroC ICE 是指ZeroC公司的ICE(Internet Communications Engine)中间件平台。
Ice 应用适合于异构平台环境中使用:客户和服务器可以采用不同的编程语言,可以运行在不同的操作系统和机器架构上,并且可以使用多种网络技术进行通信。无论部署环境如何,这些应用的源码都是可移植的。其采用C/S 模式结构,支持同步调用方式和异步调用方式,异步派发调用方式。支持跨语言的对象调用。多种语言之间采用共同的Slice(Specification Language for Ice)进行沟通。支持ice到C,JAVA,C#,VB,Python,Ruby,PHP等多种语言的映射。
ICE使我们专注于应用逻辑的开发,它来处理所有底层的网络接口编程,这样我们就不用去考虑这样的细节:打开网络连接、网络数据传输的序列化与反序列化、连接失败的尝试次数等。
--------------------------------------------------------------------------------------------------------------------------------------------------------
ICE怎么安装
在编译ice时,会提示缺少哪些必要工具,根据提示依次安装即可。
1.安装gcc,g++
yum install gcc
yum install gcc-c++
2.安装设置mcpp
yum install mcpp.x86_64
ln -s /usr/lib64/libmcpp.so.0.3.0 /usr/lib/libmcpp.so
3.安装bzip
yum install bzip2-devel.x86_64
4.安装openssh
yum install openssl-devel.x86_64
5.安装expat
yum install expat-devel.x86_64
6.安装Berkeley DB
yum install db4-devel.x86_64
7.安装ice
源码下载:http://download.zeroc.com/Ice/3.5/Ice-3.5.1.tar.gz
主目录:make
进入cpp:make install
--------------------------------------------------------------------------------------------------------------------------------------------------------
ICE 测试demo
demo.ice:定义服务器和客户端的公共接口
module Demo{ interface test{ string execute(string mth,string cmd); }; };
client.cpp:客户端程序
#include <string> #include <Ice/Ice.h> #include <demo.h> using namespace std; using namespace Demo; int main(void) { try { Ice::CommunicatorPtr ic; testPrx testServer; Ice::ObjectPrx base; ic = Ice::initialize(); base = ic->stringToProxy("TestAdapter:default -p 10000"); testServer = testPrx::checkedCast(base); string mystr = testServer->execute("My first cpp "," ice demo"); printf("result:%s\n",mystr.c_str()); } catch (const Ice::Exception& ex) { cerr << ex << endl; } }
server.cpp:服务端程序
#include <Ice/Ice.h> #include <demo.h> using namespace std; using namespace Demo; class Server:public test { public: ::std::string execute (const string & mth, const string & str,const Ice::Current &); public: Server (); }; Server::Server () { }; std::string Server::execute (const string & mth, const string & str,const Ice::Current &) { cout << mth + str << endl; return mth + str; } int main () { int status=0; Ice::CommunicatorPtr ic; try { ic = Ice::initialize(); Ice::ObjectAdapterPtr adapter = ic->createObjectAdapterWithEndpoints ("TestAdapter","default -p 10000"); Ice::ObjectPtr object = new Server; adapter->add (object, ic->stringToIdentity ("TestAdapter")); adapter->activate (); ic->waitForShutdown (); } catch (const Ice::Exception & e) { cerr << e << endl; status = 1; } catch (const char *msg) { cerr << msg << endl; status = 1; } if(ic) { try { ic->destroy(); } catch (const Ice::Exception & e) { cerr<< e <<endl; status = 1; } } return status; }