书接上回,今天基于C++的Ice实现,在我们的环境下已经安装了Ice相关的库。
还是采用相同的demo.ice.
module Demo{
interface test{
string execute(string mth,string cmd);
};
};
btw:
关于ICE的介绍
http://masterkey.iteye.com/blog/182954
ZeroC ICE之旅------java
http://masterkey.iteye.com/blog/182975
ZeroC ICE之旅------多语言互通互联
http://masterkey.iteye.com/blog/183742
ZeroC ICE之旅------集群和容错
http://masterkey.iteye.com/blog/185081
这次我们要使用slice2cpp ,把slice的语言描述转化为对应的C++代码。按照同样的思路,实现一个我们自己的execute方法
首先我们运行
slice2cpp demo.ice
在当前目录生成:
-rw-r--r-- 1 root root 11174 4月 16 10:58 demo.cpp
-rw-r--r-- 1 root root 5056 4月 16 10:58 demo.h
好像比较简洁哦,至少比slice2java生成的文件要少多了,赫赫.
由于最新的3.3b还存在一定的问题,所以我们还是采用3.2.0(很稳定,已经部署到生产环境)的环境,上面的slice2cpp也是3.2.0的程序.
下面我们实现自己的Server,和java版的Server差不多.
//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 argc, char *argv[])
{
int
status = 0;
Ice::CommunicatorPtr ic;
try
{
ic = Ice::initialize (argc, argv);
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;
}
其中:
std::string Server::execute (const string & mth, const string & str,
const Ice::Current &)
{
cout << mth + str << endl;
return mth + str;
}
实现我们自己的逻辑。有了Server,
下面再实现一个client:
//clent.cpp
#include <string>
#include <Ice/Ice.h>
#include <demo.h>
using namespace std;
using namespace Demo;
int main(void)
{
try {
int argc=0;
char* a="";
char** argv=&a;
int status = 0;
Ice::CommunicatorPtr ic;
testPrx testServer;
Ice::ObjectPrx base;
ic = Ice::initialize(argc, argv);
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;
//status = 1;
}
//printf("result:%s\n",mystr.c_str());
}
是不是很眼熟,怎么和java版本的例子差不多,有些部分就是固定格式,自己的修改的部分,不多阿。
细心的读者会发现,在Server,Client中。
Server 中
createObjectAdapterWithEndpoints 采用的TestAdapter
Client 中
stringToProxy 也是采用TestAdapter
注意这两个名称要保持一致,这样Client才能正确连接到Server上,也就是说这个是一个服务ID的标示.
default -p 10000 ,我们Server,Client都运行于同一台机器,所以采用default连接模式,
赫赫,看一下如何编译Server,Client
编译服务端采用:
g++ -I. -I$ICE_HOME/include -o Server demo.cpp Server.cpp -L$ICE_HOME/lib -lIce -lIceUtil
编译客户端采用:
g++ -I. -I$ICE_HOME/include -o client client.cpp demo.cpp -L$ICE_HOME/lib -lIce -lIceUtil
关于如何设置ICE_HOME多看看它的安装帮助把,赫赫
正确编译连接之后,生成Server,client两个程序.
运行Server,再在两一个控制台下,运行client,
client控制台:result:My first cpp ice demo
server控制台:My first cpp ice demo
哈哈,到目前为止基于C++的Ice例子介绍到这里,虽然例子很小,很简单,不过充分对其工作模式的展示,也说明采用Ice进行远程过程调用开发的简单,简洁.Ice的Server可以支持多个Client连接到同一个Server,更厉害的是一个Client可以连接多个Server。Ice是不是很神奇,我会在日后的blog向大家介绍。
ICE之轻量级分布式通讯中间件
http://masterkey.iteye.com/blog/182954
ZeroC ICE之旅------java
http://masterkey.iteye.com/blog/182975
ZeroC ICE之旅------Slice
http://masterkey.iteye.com/blog/184064
ZeroC ICE之旅------多语言互通互联
http://masterkey.iteye.com/blog/183742
更多精彩,请关注:
Titan的天空
http://masterkey.iteye.com
分享到:
相关推荐
ASP.NET ZERO 带补丁亲测。 利用ABP框架搭建的模板项目,它会提供预建的页面及强大的基础设施架构。利用它提供的基础框架代码能让你快速的开发你...基于Abp开发的aspnet-zero-core-9.0.0最新版本,测试可用,可以改名。
OpenWrt-Lede_18.06.02 OrangePi Zero wifi-xr819 and soc-audio enabled! OrangePi Zero 安装OpenWrt 能够实现wifi和播放音乐。 详细安装和操作步骤: First Run boot-config: ...
Ice-3.6.4-msvc2015.msi zero-ice msvs2015 Ice-3.6.4-msvc2015.msi zero-ice msvs2015
OpenAI 成功训练了一个能够从文本标题生成图像的网络。 它与 GPT-3 和 Image GPT 非常相似,并产生了惊人的结果。
aspnet-zero-core-8.1.0商业版aspnet-zero-core-8.1.0商业版
AIGC论文-DALLE-Zero-Shot Text-to-Image Generation
zero\axis2-1.6.1-war.zip Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x ...
基于Abp开发的aspnet-zero-core-6.3.0最新版本,测试可用。
zero ICE快速入门文档, ice是最优秀的rpc框架。 4、开发服务端代码如下 步骤一:编写Servant类即带有Disp的存根文件也就是说继承_HelloWorldDisp 这个类,这个类是个抽象类定义如下: public abstract class _...
资源分类:Python库 所属语言:Python 资源全名:zero_width_lib-1.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
3/159 Syngress Zero-Day Exploit - Countdown to Darkness
zero-trust-Endpoint-IoT-Security-Infographic-2020
ICE开发资料,帮助程序使用ZERO-ICE进行C++开发
AES+ECB+pad-zeropadding+crypto-js加密,内含例子,打开例子在控制台就可看到加密和解密后的数据
zero-takeoff-learn-linux-c-programming, 零点起飞学习Linux C编程
Ablon-Zero-Days-Thousands-Of-Nights-The-Life-And-Times-Of-Zero-Day-Vulnerabilities-And-Their-Exploits
关于信号与系统方面的零极点的总结,收集了很长时间的哦
教程包括: 第一部分 Ice综述 第二部分 核心概念 第三部分 高级Ice 第四部分 Ice服务 附录ice各种配置说明
Zero-Shot Cross-Lingual Machine Reading Comprehension via Inter-Sentence Dependency Graph_基于句间依存图的零触发跨语言机器阅读理解.pdf