Ice学习--简单的例子(服务端)
2016-09-02 15:56
253 查看
Zeroc Ice是一款通信组件。其开发主要分一下几步:
1) 编写slice文件
2) 通过slice2cpp工具将slice文件翻译成相应的.h和.cpp文件
3) 编写服务端
4) 编写客户端
以下仅以官方上的例子做说明:
1、 slice文件定义printer.ice:
module Demo
{
interface Printer
{
void printString(string str);
};
};
注意:
a、 文件中必须要有根module,否则翻译失败
b、 module翻译后对应C++的命名空间,interface翻译后对应C++的类名
c、 module后interface中的} 必须跟';'符号,否则翻译失败
2、 通过slice2cpp工具将printer.ice翻译成对应的.h和.cpp文件
slice2cpp 命令如下:start slice2cpp printer.ice --stream
可以发现对应目录下多出来两个文件:printer.h printer.cpp
3、 服务器编写:
服务器编写首先要实现Printer接口:
class PrinterImpl : public Demo::Printer
{
void printerString(const std::string &strIn, const Ice::Current /*= Ice::Current()*/)
{
std::cout<<strIn;
}
};
服务器主体代码:
void main(int args, char* argv)
{
Ice::CommunicatorPtr ic;
try
{
ic = Ice::Initialize(args, argv); // ice组件初始化工作
// 创建代理适配器,一个ic组件可以有多个代理适配器
// PrinterAdapterPrx作为代理适配器的名称,可以自由定义,但是一个ic组件下的代理适配器名称必须唯一
// default -p 10000 代理适配器监听端口配置,端口必须唯一
Ice::ObjectAdapterPrx oAdapterPrx = ic->createObjectAdatperWithEndpoints("PrinterAdapterPrx", "default -p 10000");
// 创建服务
Ice::ObjectPtr oServant = new PrinterImpl();
// 代理适配器管理服务
// PrinterServant为服务的名称,一个代理适配器下可以管理多个服务
// 同一个代理适配器下的多个服务名称必须唯一
oAdapterPrx->add(oServant, ic->stringToIdentity("PrinterServant"));
// 激活代理适配器
oAdapterPrx->activate();
// 主线程等待客户请求
ic->waitForShutdown();
}
catch(Ice::LocalException &ex)
{
std::cout << ex.ice_name();
}
if (NULL != ic)
{
// 关闭组件
ic->destroy();
}
}
1) 编写slice文件
2) 通过slice2cpp工具将slice文件翻译成相应的.h和.cpp文件
3) 编写服务端
4) 编写客户端
以下仅以官方上的例子做说明:
1、 slice文件定义printer.ice:
module Demo
{
interface Printer
{
void printString(string str);
};
};
注意:
a、 文件中必须要有根module,否则翻译失败
b、 module翻译后对应C++的命名空间,interface翻译后对应C++的类名
c、 module后interface中的} 必须跟';'符号,否则翻译失败
2、 通过slice2cpp工具将printer.ice翻译成对应的.h和.cpp文件
slice2cpp 命令如下:start slice2cpp printer.ice --stream
可以发现对应目录下多出来两个文件:printer.h printer.cpp
3、 服务器编写:
服务器编写首先要实现Printer接口:
class PrinterImpl : public Demo::Printer
{
void printerString(const std::string &strIn, const Ice::Current /*= Ice::Current()*/)
{
std::cout<<strIn;
}
};
服务器主体代码:
void main(int args, char* argv)
{
Ice::CommunicatorPtr ic;
try
{
ic = Ice::Initialize(args, argv); // ice组件初始化工作
// 创建代理适配器,一个ic组件可以有多个代理适配器
// PrinterAdapterPrx作为代理适配器的名称,可以自由定义,但是一个ic组件下的代理适配器名称必须唯一
// default -p 10000 代理适配器监听端口配置,端口必须唯一
Ice::ObjectAdapterPrx oAdapterPrx = ic->createObjectAdatperWithEndpoints("PrinterAdapterPrx", "default -p 10000");
// 创建服务
Ice::ObjectPtr oServant = new PrinterImpl();
// 代理适配器管理服务
// PrinterServant为服务的名称,一个代理适配器下可以管理多个服务
// 同一个代理适配器下的多个服务名称必须唯一
oAdapterPrx->add(oServant, ic->stringToIdentity("PrinterServant"));
// 激活代理适配器
oAdapterPrx->activate();
// 主线程等待客户请求
ic->waitForShutdown();
}
catch(Ice::LocalException &ex)
{
std::cout << ex.ice_name();
}
if (NULL != ic)
{
// 关闭组件
ic->destroy();
}
}
相关文章推荐
- Ice学习--简单的例子(客户端)
- SAP ABAP/4学习---ALV的简单例子3-单击某行调用事务码
- 难得今天积极的帮别人回答问题,顺便贴出来。这可能是学习事件的最简单的例子了
- 学习O/RM,从最简单的例子开始...之四
- 委托delegate的学习.+一个简单的委托和委托链的例子
- 委托delegate的学习.+一个简单的委托和委托链的例子
- SAP ABAP/4学习---ALV的简单例子1-写入EXCEL自动
- SAP ABAP/4学习--学习使用OO在ABAP中.简单入门概念.用个例子来说明
- 学习O/RM,从最简单的例子开始... 之二
- 学习O/RM,从最简单的例子开始...之一
- 学习O/RM,从最简单的例子开始...之四(2)
- 学习Altas 笔记[JS简单调用服务端方法]
- [原创]Ruby学习笔记(2)-简单例子
- 学习O/RM,从最简单的例子开始...之三
- SAP ABAP/4学习--学习使用OO在ABAP中.简单入门概念.用个例子来说明
- SAP ABAP/4学习--学习使用OO在ABAP中.简单入门概念.用个例子来说明
- 让客户端javascript修改的内容在服务端也能记忆的一个简单例子
- .NET学习经典例子:.NET PetShop和Duwamish简单介绍
- SAP ABAP/4学习---ALV的简单例子2-单击某行调用事务码
- js定义对象简单学习例子