初学ICE中间件总结笔记(一)
来源:互联网 发布:淘宝严重违规12分2999 编辑:程序博客网 时间:2024/04/30 18:41
参考文章连接:http://blog.csdn.net/whuqin/article/details/7750107
http://blog.csdn.net/nokianasty/article/details/9701863
http://yangguo.iteye.com/blog/1096630
ICE介绍
● 提供适用于异种环境的面向对象中间件平台。
● 提供一组完整的特性,支持广泛的领域中的实际的分布式应用的开发。
● 避免不必要的复杂性,使平台更易于学习和使用。
● 提供一种在网络带宽、内存使用和 CPU 开销方面都很高效的实现。
● 提供一种具有内建安全性的实现,使它适用于不安全的公共网络。
Ice应用的结构如下:
Slice 语言module Demo { interface Printer { void printString(string s); };};
slice2cpp Printer.ice生成Printer.h和Printer.cpp,把这两个文件加入到服务器端项目和客户端项目后就可以互相对话。
编写服务器端代码:
- #include <ice/ice.h>
- #include <printer.h>
- using namespace std;
- using namespace Demo;
- //实现printString方法
- struct PrinterImp:Printer{
- virtual void printString(const ::std::string &s,
- const ::Ice::Current & = ::Ice::Current()){
- cout << s << endl;
- }
- };
- int
- main(int argc, char* argv[])
- {
- Ice::CommunicatorPtr ic;
- try{
- // 初始化Ice运行库
- ic = Ice::initialize(argc, argv);
- // 建立ObjectAdapter(对象适配器),命名为SimplePrinterAdapter
- // 绑定端口:使用默认协议(一般是tcp)并在10000端口监听。
- Ice::ObjectAdapterPtr adapter = ic->createObjectAdapterWithEndpoints(
- "SimplePrinterAdapter", "default -p 10000");
- // 把Printer加入ObjectAdapter,并命名为SimplePrinter
- Ice::ObjectPtr object = new PrinterImp;
- adapter->add(object, ic->stringToIdentity("SimplePrinter"));
- //启动适配器
- adapter->activate();
- //等待直到Communicator关闭
- ic->waitForShutdown();
- }
- catch(const Ice::Exception &e){
- cerr << e << endl;
- }
- catch(const char* msg){
- cerr << msg << endl;
- }
- // 回收Ice运行库所用的资源
- if(ic) ic->destroy();
- return 0;
- }
客户端代码:
- #include <ice/ice.h>
- #include <printer.h>
- using namespace std;
- using namespace Demo;
- int
- main(int argc, char* argv[])
- {
- Ice::CommunicatorPtr ic;
- try{
- // 初始化Ice运行库
- ic = Ice::initialize(argc, argv);
- //获得Ice对象代理,SimplePrinter-对象标识符,default -p 10000-协议与端口
- Ice::ObjectPrx base = ic->stringToProxy("SimplePrinter:default -p 10000");
- // 把对象转换成Printer代理
- PrinterPrx printer = PrinterPrx::checkedCast(base);
- if(!printer) throw "Invalid Proxy!";
- // 调用printString方法操作
- printer->printString("Hello World!");
- }
- catch(const Ice::Exception &e){
- cerr << e << endl;
- }
- catch(const char* msg){
- cerr << msg << endl;
- }
- // 回收Ice运行库所用的资源
- if(ic) ic->destroy();
- return 0;
- }
//服务端 c++ -I. -I$ICE_HOME/include -c Printer.cpp Server.cpp c++ -o server Printer.o Server.o -L$ICE_HOME/lib -lIce -lIceUtil //客户端 c++ -I. -I$ICE_HOME/include -c Printer.cpp Client.cpp c++ -o client Printer.o Client.o -L$ICE_HOME/lib -lIce -lIceUtil
0 0
- 初学ICE中间件总结笔记(一)
- 初学ICE中间件总结笔记(一)续
- 通讯中间件ICE学习(一) 介绍
- Ice读书笔记--中间件概念与Ice综述(一)
- 学习中间件ICE笔记(初学者必读)
- ICE中间件研究笔记
- ICE中间件笔记
- ICE中间件研究笔记
- linux环境下安装PHP中间件ICE(一)
- Ice笔记---Ice run time详述(一)
- ICE中间件学习笔记 基础理论篇
- ICE中间件
- ICE中间件
- Ice读书笔记--中间件概念与Ice综述(二)
- 初学Python笔记(一)
- 初学MySQL笔记(一)
- jQuery 初学笔记(一)
- Python初学笔记(一)
- [题解][LeetCode][Valid Parentheses]
- [leetcode] Unique Paths
- LeetCode: Validate Binary Search Tree
- 解密 【JavaScript Eval】不为人知的秘密
- IOS开发之__bridge,__bridge_transfer和__bridge_retained
- 初学ICE中间件总结笔记(一)
- 总结安卓开发中常用的七个第三方框架
- day122(7.13)性能测试知识总结V
- Enterprise Architect使用问题记录
- JavaScript基础-window.location的用法
- objective-c 字符串筛选数字(不使用正则表达式)
- 内容提供者ContentProvider →采用layoutInflater打气筒创建一个view对象
- 第一个ios应用(2)
- linux mysql 备份数据库