ZeroC Ice demo构建(继承Ice::Application类)
本文介绍搭建ZeroC Ice demo的方法,该demo的搭建过程中使用到了Ice提供的Ice::Application类。
1. Ice::Application介绍
Ice::Application类封装了所有的初始化和终止操作,用户在使用Ice::Application类时,就不需要过分关注初始化及相关异常,而将重点放在服务代码的实现上。
要使用Ice::Application的相关功能,需要继承Ice::Application类、并在派生类中对Ice::Application类中的纯虚方法run进行具体实现,最终的Ice服务接口都是在run方法定义的。
2. demo构建
说明:本文介绍的demo程序是在Centos 7上、使用C++语言开发的,对应的ice版本为3.6.4。
沿用前文《ZeroC Ice介绍与简单demo构建》中已编写的基础框架文件(即Hello.ice、Hello.h、Hello.cpp、HelloI.h、HelloI.cpp),我们继续编写继承Ice::Application类的demo中的剩余文件,这些剩余文件包括:一个继承Ice::Application类的服务端程序、服务端程序的配置文件、一个普通的客户端文件。
2.5 编写Ice服务器代码
说明:本节继承了前文《ZeroC Ice介绍与简单demo构建》的部分内容,所以本节直接以2.5小节开始计数。
Ice的服务端代码继承了Ice::Application类,服务端代码(server.cpp)如下:
#include <Ice/Ice.h>
#include <HelloI.h>using namespace std;class HelloServer : public Ice::Application
{
public:virtual int run(int, char*[]);
};int HelloServer::run(int argc, char*[])
{if(argc > 1){cerr << appName() << ": too many arguments" << endl;return EXIT_FAILURE;}Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("HelloAdapter");Demo::HelloPtr hello = new HelloI;adapter->add(hello, communicator()->stringToIdentity("hello"));adapter->activate();communicator()->waitForShutdown();return EXIT_SUCCESS;
}int main(int argc, char* argv[])
{HelloServer app;return app.main(argc, argv, "config.server");
}
服务端程序的配置文件(config.server)内容如下:
#
# The server creates one single object adapter with the name
# "HelloAdapter". The following line sets the endpoints for this
# adapter.
#
# When no -h <host> option is specified in the endpoints, the default
# value from the Ice.Default.Host property is used. If this property
# isn't set, the endpoints will listen on all available network
# interfaces.
#
HelloAdapter.Endpoints=tcp -p 10000#
# Only listen on the localhost interface by default. You can comment
# out this property to allow listening on all available interfaces.
#
Ice.Default.Host=localhost
注意:本文到现在为止,介绍的几个文件(Hello.ice、Hello.h、Hello.cpp、HelloI.h、HelloI.cpp、server.cpp、config.server)为搭建继承Ice::Application类的Ice demo时需要使用的基础框架文件,对于其他需要继承Ice::Application类进行demo搭建的文章,如无特殊说明,均沿用了这七个基础文件。相关的demo搭建链接如下:
- 只是继承Ice::Application类搭建Ice demo,不涉及其他技术,请参考本文后续部分。
- 继承Ice::Application类搭建IceGrid的demo环境,相关文章点击此处。
2.6 编写客户端代码
客户端代码(client.cpp)如下:
#include <Ice/Ice.h>
#include <Hello.h>using namespace std;
using namespace Demo;int main(int argc, char* argv[])
{int status = 0;Ice::CommunicatorPtr ic;try{ic = Ice::initialize(argc, argv);Ice::ObjectPrx base = ic->stringToProxy("hello:tcp -h localhost -p 10000");HelloPrx hello = HelloPrx::checkedCast(base);if (!hello){throw "Invalid proxy";}string result = "";result = hello->SayHello("liitdar");cout << "[ice_with_application] client's result: " << result << endl;}catch (const Ice::Exception& ex){cerr << ex << endl;status = 1;}catch (const char* msg){cerr << msg << endl;status = 1;}if (ic){ic->destroy();}return status;
}
2.7 编译生成客户端和服务端的应用程序
编译生成服务端应用程序(server),命令如下:
g++ -o server -I. server.cpp Hello.cpp HelloI.cpp -lIce -lIceUtil -lpthread
编译生成客户端应用程序(client),命令如下:
g++ -o client -I. client.cpp Hello.cpp -lIce -lIceUtil -lpthread
2.8 运行服务端与客户端程序
在一个终端运行服务端程序,如下:
./server
新打开一个终端,运行客户端程序,如下:
./client
正常情况下,我们能够在上面的两个终端中看到服务端与客户端的信息交互情况,如下:
【服务端】:
【客户端】:
如果两个终端中出现了上述信息,说明demo程序部署成功了。
ZeroC Ice demo构建(继承Ice::Application类)相关推荐
- Ice笔记-利用Ice::Application类简化Ice应用
作者:ydogg,转载请申明. 在编写Ice相关应用时,无论是Client还是Server端,都必须进行一些必要的动作,如:Ice通信器初始化.异常捕获,以及应用终止后的销毁.鉴于每个应用都需要,Ic ...
- PHP中间件ICE,ICE的安装配置,ICE常见编译和运行(异常)错误(自测Php版本安装部分,因为php版本跟ice版本不一样失败)
ICE(Internet Communications Engine)是Zeroc提供的一款高性能的中间件.使用ICE能使得php(或c++,java,python)与java,c++,.net,py ...
- Android 实例解说Application类
版本:1.0 日期:2014.3.28 版权:© 2014 kince 转载注明出处 何为Application,有何用途?Google官方文档是这样说的:维护全局应用程序的状态,使用的时候继承于它创 ...
- Android中用Application类实现全局变量
在Java中如果要使用全局变量,一般定义public static类型的变量.但是这种方法不符合Android的框架架构,Android中要使用Application context. Applica ...
- Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式
一.继承的概念及用法 继承背后的思想就是 基于已存在的类来构建新类 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...
- Android中Application类用法
Application类 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系 ...
- 20151008_Android Application类
1. Application类 Application和Activity,Service一样,是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象, ...
- 在Android开发中怎样使用Application类
转载地址:http://www.jianshu.com/p/3138f9c351e8 --- 在Android开发中怎样使用Application类 自己独立开发项目才发现以前对Application ...
- 什么是继承?Java中如何声明一个类继承另一个类?
在现实生活中,说到继承,多会想到子女继承父辈的财产.事业等.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关联体系.例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动 ...
- java 安卓application_Android中Application类用法
Application类 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系 ...
最新文章
- 怎么在PHP植入音乐,PHP网站插入音乐
- mysql 中limit 用法!!
- 计算机软件考试预测,2020年计算机软件水平考试信息技术处理员预测试题及参考答案...
- cacti的mysql密码_cacti 监控搭建
- [转]android使用shape stroke描边只保留底部
- harbor的镜像复制功能使用教程
- 深入php-fpm的两种进程管理模式详解
- 【ROS问题】rqt_plot运行报错
- 事件(二):事件处理程序
- html新一代网页播放器源码 未加密
- 自检代码中trustmanager漏洞_通达OA远程代码执行漏洞通告
- linux的tar命令压缩26g文件,如何使用Linux上的tar命令压缩和解压缩文件 | MOS86
- C# Color颜色RGB对照表
- 聚合支付系统设计(一)
- 做网站必备!该文介绍下国内服务器与国外服务器的区别
- python 视频播放 拖动_python + opencv鼠标拖动视频区域裁剪
- html5 音乐播放进度条,js实现音乐播放控制条
- 激光雷达:905与1550的战争
- Cutecom无法打开USB串口
- dubbo问题:forbid consumer报错
热门文章
- MSB与LSB的含义
- 跟KingDZ学HTML5之九 HTML5新的 Input 种类
- 微软ReportViewer(rdlc)发布时所需要的动态库(vs2010)
- 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(2)
- lucene的基础入门
- [JZOJ P1327] [DP]订货
- 转载--#define 用法
- 腾讯2012实习生招聘面试题:矩阵中A移动到B一共有多少走法
- SVN客户端服务器搭建与使用(一)
- individual program总结2.0