xylz,imxylz

关注后端架构、中间件、分布式和并发编程

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  111 随笔 :: 10 文章 :: 2680 评论 :: 0 Trackbacks

ICE Grid 入门篇


这篇是ICE Grid入门的最简单版本(不涉及到IceGride Node)。这里面设计到过多的概念和知识,暂且不表。

创建slice文件

Printer.ice
 1 // **********************************************************************
 2 //
 3 // Copyright (c) 2012 Ady Liu. All rights reserved.
 4 //
 5 // Email: imxylz@gmail.com
 6 //
 7 // **********************************************************************
 8 
 9 module Demo{
10     interface Printer {
11         void printString(string s);
12     };
13 };

转换slice

slice2cpp Printer.ice 

配置IceGrid Registry
registry.cfg
IceGrid.InstanceName=DemoGrid

Ice.Default.Locator=DemoGrid/Locator:default -p 4061  

IceGrid.Registry.Client.Endpoints=tcp -p 4061
IceGrid.Registry.Server.Endpoints=tcp
IceGrid.Registry.Internal.Endpoints=tcp
IceGrid.Registry.PermissionsVerifier=DemoGrid/NullPermissionsVerifier
IceGrid.Registry.AdminPermissionsVerifier=DemoGrid/NullPermissionsVerifier
IceGrid.Registry.SSLPermissionsVerifier=DemoGrid/NullSSLPermissionsVerifier
IceGrid.Registry.AdminSSLPermissionsVerifier=DemoGrid/NullSSLPermissionsVerifier
IceGrid.Registry.Data=./data
IceGrid.Registry.DynamicRegistration=1

启动Registry
icegridregistry --Ice.Config=./registry.cfg &
启动前最好创建数据目录./data
mkdir ./data

服务端

PrinterI.h
 1 //**********************************************************************
 2 //
 3 // Copyright (c) 2012 Ady Liu. All rights reserved.
 4 //
 5 // Email: imxylz@gmail.com
 6 //
 7 //**********************************************************************
 8 
 9 #ifndef PRINTER_I_H
10 #define PRINTER_I_H
11 
12 #include <Printer.h>
13 
14 using namespace Demo;
15 using namespace std;
16 
17 class PrinterI : public Printer {
18 public:
19     virtual void printString(const string& s,const Ice::Current&);
20 };
21 
22 #endif
23 

PrinterI.cpp
 1 //**********************************************************************
 2 //
 3 // Copyright (c) 2012 Ady Liu. All rights reserved.
 4 //
 5 // Email: imxylz@gmail.com
 6 //
 7 //**********************************************************************
 8 
 9 #include <Ice/Ice.h>
10 #include <PrinterI.h>
11 
12 using namespace std;
13 
14 void PrinterI :: printString(const string& s,const Ice::Current&){
15     cout << s << endl;
16 }
17 

Server.cpp
 1 #include <Ice/Ice.h>
 2 #include <PrinterI.h>
 3 
 4 using namespace std;
 5 
 6 class Server : public Ice::Application {
 7 
 8     public:
 9         virtual int run(int argc,char* argv[]);
10 };
11 
12 int main(int argc,char* argv[]){
13 
14     Server app;
15     int status = app.main(argc,argv,"server.cfg");
16     return status;
17 }
18 
19 int Server::run(int argc,char* argv[]){
20     if(argc>1){
21         cerr<<appName()<<": too many arguments"<<endl;
22         return EXIT_FAILURE;
23     }
24 
25     Ice::PropertiesPtr properties = communicator()->getProperties();
26     Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("PrinterAdapter");
27     Ice::Identity id = communicator()->stringToIdentity("printer");
28     Demo::PrinterPtr printer = new PrinterI();
29     adapter->add(printer,id);
30     adapter->activate();
31     communicator()->waitForShutdown();
32     return EXIT_SUCCESS;
33 }
34 

编译
c++ -I. -I$ICE_HOME/include -c PrinterI.cpp Printer.cpp Server.cpp

连接
c++ -o server Printer.o Server.o PrinterI.o -L$ICE_HOME/lib -lIce -lIceUtil -lpthread

服务端配置
server.cfg
PrinterAdapter.AdapterId=PrinterAdapter
PrinterAdapter.Endpoints=default
Ice.Default.Locator=DemoGrid/Locator:tcp -p 4061
运行服务端
./server

客户端

Client.cpp
 1 //**********************************************************************
 2 //
 3 // Copyright (c) 2012 Ady Liu. All rights reserved.
 4 //
 5 // Email: imxylz@gmail.com
 6 //
 7 //**********************************************************************
 8 
 9 #include <Ice/Ice.h>
10 #include <IceGrid/IceGrid.h>
11 #include <Printer.h>
12 
13 using namespace std;
14 using namespace Demo;
15 
16 int main(int argc,char* argv[]){
17     int status = 0;
18     Ice::CommunicatorPtr ic;
19     PrinterPrx printer;
20     try{
21         ic = Ice::initialize(argc,argv);
22         cout<<"Printer Proxy=>"<<ic->stringToProxy("printer@PrinterAdapter")<<endl;
23 
24         try{
25            printer = PrinterPrx::checkedCast(ic->stringToProxy("printer@PrinterAdapter"));
26         }catch(const Ice::NotRegisteredException&){
27             IceGrid::QueryPrx query = IceGrid::QueryPrx::checkedCast(ic->stringToProxy("DemoGrid/Query"));
28             printer = PrinterPrx::checkedCast(query->findObjectByType("::Demo::Printer"));
29         }
30         if(!printer){
31             cerr<<": could't find a `::Demo::Printer` object."<<endl;
32             if(ic){
33                 ic->destroy();
34             }
35             return EXIT_FAILURE;
36         }
37         printer->printString("Hello world!");
38     }catch(const Ice::Exception& ex){
39         cerr << ex << endl;
40         status = 1;
41     }catch(const char* msg){
42         cerr << msg << endl;
43         status = 2;
44     }
45     if(ic){
46         ic->destroy();
47     }
48     return status;
49 }
50 

编译
c++ -I. -I$ICE_HOME/include -c Printer.cpp Client.cpp

连接
c++ -o client Printer.o Client.o -L$ICE_HOME/lib -lIce -lIceUtil -lIceGrid -lGlacier2 -lpthread

客户端配置
client.cfg
Ice.Default.Locator=DemoGrid/Locator:default -p 4061

运行客户端
./client --Ice.Config=./client.cfg


所有文件

grid
├── client.cfg
├── Client.cpp
├── Printer.cpp
├── Printer.h
├── PrinterI.cpp
├── PrinterI.h
├── registry.cfg
├── server.cfg
└── Server.cpp


所有文件下载: Ice Mini Guide

©2009-2014 IMXYLZ |求贤若渴
posted on 2012-05-22 19:47 imxylz 阅读(3358) 评论(0)  编辑  收藏 所属分类: ICE

只有注册用户登录后才能发表评论。


网站导航:
 

©2009-2014 IMXYLZ