<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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


    網站導航:
     

    ©2009-2014 IMXYLZ
    主站蜘蛛池模板: 日韩电影免费在线观看中文字幕| 一个人看的免费高清视频日本| 免费不卡在线观看AV| 亚洲人成网7777777国产| 亚洲第一视频在线观看免费| 亚洲国产av无码精品| 中文字幕免费观看视频| 亚洲开心婷婷中文字幕| 好久久免费视频高清| 亚洲综合成人网在线观看| 114级毛片免费观看| 亚洲国产成人久久三区| 亚洲欧洲免费无码| 亚洲人成未满十八禁网站| 国产免费人人看大香伊| 中美日韩在线网免费毛片视频| 在线亚洲人成电影网站色www| 精品成人免费自拍视频| 亚洲视频在线免费看| 手机在线毛片免费播放| 日韩精品无码永久免费网站| 亚洲无码在线播放| 中文毛片无遮挡高潮免费| 亚洲精品理论电影在线观看| 亚洲国产人成精品| 色欲色香天天天综合网站免费| 亚洲人成日本在线观看| 无码不卡亚洲成?人片| 日韩av无码免费播放| 亚洲人成片在线观看| 国产91在线免费| 精品四虎免费观看国产高清午夜| 亚洲天堂一区在线| 免费在线一级毛片| 久久狠狠躁免费观看2020| 亚洲熟妇无码一区二区三区 | 亚洲AV永久无码精品网站在线观看| 四虎永久免费地址在线网站| 大地资源网高清在线观看免费| 亚洲一区中文字幕在线观看| 亚洲毛片不卡av在线播放一区|