`
masterkey
  • 浏览: 339355 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ZeroC ICE之旅------C++

阅读更多
书接上回,今天基于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
2
3
分享到:
评论

相关推荐

    Python库 | zeroc_ice-3.7.0-cp36-cp36m-win_amd64.whl

    标题中的“zeroc_ice-3.7.0-cp36-cp36m-win_...总的来说,zeroc_ice库为Python开发者提供了强大的分布式通信能力,简化了多进程间的数据交换,并且具有良好的性能和可扩展性,是构建复杂后端系统时值得考虑的工具之一。

    ASP.NET Zero Core 9.0.0 AbpZero最新源码 aspnet-zero-core-9.0.0

    ASP.NET ZERO 带补丁亲测。 利用ABP框架搭建的模板项目,它会提供预建的页面及强大的基础设施架构。利用它提供的基础框架代码能让你快速的开发你...基于Abp开发的aspnet-zero-core-9.0.0最新版本,测试可用,可以改名。

    openwrt-orangepi-zero-ext4-sdcard.img.gz

    OpenWrt-Lede_18.06.02 OrangePi Zero wifi-xr819 and soc-audio enabled! OrangePi Zero 安装OpenWrt 能够实现wifi和播放音乐。 详细安装和操作步骤: First Run boot-config: ...

    【AI论文和代码2021年】Zero-Shot_Text-to-Image Generation from OpenAI

    标题中的“Zero-Shot Text-to-Image Generation”指的是在没有经过特定示例训练的情况下,模型能够根据输入的文本描述生成相应的图像的技术。OpenAI的研究团队在这个领域取得了突破性进展,他们开发的网络能够实现这...

    Ice-3.6.4.msi

    Ice-3.6.4-msvc2015.msi zero-ice msvs2015 Ice-3.6.4-msvc2015.msi zero-ice msvs2015

    zeroc ice教程 ice环境配置 Ice中文教程 C++ ICE java ICE ICE入门 ice基础教程 ice开发文档

    Zeroc ICE是一个开源的中间件平台,它支持C++、Java、Python、.NET等语言的分布式对象通信。ICE全称Internet Communications Engine,即互联网通信引擎,是一种用于开发分布式计算应用的强大工具。本文档主要围绕ICE...

    管理系统系列--Zero-Admin 是一套基于 go-zero 框架实现的电商系统,包括前台商城系统和后台管理系统.zip

    【标题】中的“管理系统系列--Zero-Admin”指的是一个电商解决方案,它采用了“go-zero”框架来构建。go-zero是一个用Go语言编写的微服务框架,旨在简化开发过程,提高系统的可扩展性和稳定性。Zero-Admin这个命名...

    基于go-zero框架的电商系统Zero-Admin.zip

    Zero-Admin是一套基于go-zero框架实现的电商系统后端服务,采用Docker容器化部署。它包含前台商城系统、后台管理系统,采用现代化的前端框架进行界面开发。项目特点包括高性能、易扩展,以及丰富的功能模块如商品...

    AlphaZero-In-Unity_alphazero_五子棋AI_AlphaZero-In-Unity_missingopg

    在这个项目中,“AlphaZero-In-Unity”提供了四子棋、翻转棋和五子棋的AI实现,让玩家可以在Unity环境中与这些AI进行对战。 五子棋AI是AlphaZero应用的一个实例,五子棋是一种策略性很强的两人棋类游戏,目标是在...

    zero\axis2-1.6.1-war.zip

    zero\axis2-1.6.1-war.zip Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x ...

    sun8i-v3s-licheepi-zero-with-800x480-lcd.dts

    sun8i-v3s-licheepi-zero-with-800x480-lcd

    aspnet-zero-core-6.3.0.zip

    此压缩包 "aspnet-zero-core-6.3.0.zip" 包含了该框架的最新稳定版本 6.3.0,适用于构建高效、可扩展的企业级解决方案。 **ABP 框架** ABP 是一套用于 .NET 平台的开源应用程序框架,它提供了一种结构化的方法来...

    Syngress - Zero-Day Exploit - Countdown to Darkness

    3/159 Syngress Zero-Day Exploit - Countdown to Darkness

    Zero ICE 3.5.1 jar

    远程调用框架 Zero ICE 3.5.1 jar

    Ubuntu-zeroc-ice 环境安装

    在Ubuntu系统上安装Zeroc-ICE环境主要涉及以下知识点: 1. Ubuntu虚拟机的安装:用户需要在计算机上安装一个虚拟机软件,比如VirtualBox或者VMware,然后在虚拟机中安装Ubuntu操作系统。这一步骤是为了创建一个独立...

    aspnet-zero-core-8.1.0.zip

    此压缩包"aspnet-zero-core-8.1.0.zip"包含的是ASP.NET Zero 8.1.0版本的商业源代码。 **.NET Core** .NET Core 是微软推出的开源、跨平台的开发框架,用于构建服务器端应用。它支持Windows、Linux和macOS等操作...

    Python库 | zero_width_lib-1.0.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:zero_width_lib-1.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | zeroone-ai-0.0.11.tar.gz

    "zeroone-ai-0.0.11.tar.gz" 是一个Python库的压缩包,版本号为0.0.11。这个库是专门为人工智能(AI)领域开发的,可能包含了各种工具和算法,方便开发者进行AI相关的编程工作。在Python中,库扮演着至关重要的角色...

    Ice 分布式程序设计 中文PDF版_C++_Zero_

    《Ice分布式程序设计》中文PDF版是一本专为C++开发者设计的指南,它详细介绍了如何使用ZERO-ICE框架进行分布式编程。ZERO-ICE是一个强大的、面向对象的、基于组件的中间件,它允许程序员在多种语言之间创建无缝的、...

Global site tag (gtag.js) - Google Analytics