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 閱讀(3383) 評論(0)  編輯  收藏 所屬分類: ICE

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          ©2009-2014 IMXYLZ
          主站蜘蛛池模板: 宣汉县| 南充市| 兴化市| 策勒县| 温泉县| 定日县| 蓬溪县| 娄烦县| 龙里县| 新密市| 永德县| 大关县| 焉耆| 明溪县| 长寿区| 运城市| 额济纳旗| 宝兴县| 普定县| 岐山县| 乡城县| 临清市| 都昌县| 锦州市| 延安市| 榆林市| 栖霞市| 肥东县| 定襄县| 安西县| 全州县| 宣城市| 卢龙县| 四会市| 凉城县| 仪陇县| 新河县| 南陵县| 钟祥市| 乌兰县| 凉城县|