linux下ice是什么

linux下的ice是“Internet Communications Engine”的簡稱,是互聯網通信引擎的意思,是一個面向對象中間件;ICE可以專注于應用邏輯的開發,用于處理所有底層的網絡接口編程,可用最小的代價構建分布式應用程序。

linux下ice是什么

本教程操作環境:linux7.3系統、Dell G3電腦。

linux下ice是什么

?ICE是ZEROC的開源通信協議產品,它的全稱是:The Internet Communications Engine,翻譯為中文是互聯網通信引擎,是一個面向對象的中間件,使我們能夠以最小的代價構建分布式應用程序。

ICE使我們專注于應用邏輯的開發,它來處理所有底層的網絡接口編程,這樣我們就不用去考慮這樣的細節:打開網絡連接、網絡數據傳輸的序列化與反序列化、連接失敗的嘗試次數等。

示例在linux下安裝ice過程:

下載安裝源

cd?/etc/yum.repos.d sudo?wget?https://zeroc.com/download/Ice/3.7/el7/zeroc-ice3.7.repo

Ice所需庫?

  • bzip2?1.0

  • Expat?2.1?or?later

  • LMDB?0.9?(LMDB?is?not?required?with?the?c++11?mapping)

  • mcpp?2.7.2?with?patches

  • OpenSSL?1.0.0?or?later?(on?AIX?and?Linux)

安裝lmdb-devel?mcpp-devel(其他庫系統可能自帶有,可先不安裝,等make報錯再安裝)

sudo?yum?install?lmdb-devel?mcpp-devel

下載Ice源碼ice-3.7.3.tar.gz,解壓

cd?/home/user/ tar?-zxf?ice-3.7.3.tar.gz cd?ice-3.7.3/cpp

編譯(默認C++98,可設置CXXFLAGS修改為c++11)

sudo?make?-j4 sudo?make?CXXFLAGS=-std=c++11?-j4

src/Ice/SHA1.cpp:14:31:?致命錯誤:openssl/sha.h:沒有那個文件或目錄

sudo?yum?install?openssl-devel

src/Ice/ConnectionI.cpp:27:21:?致命錯誤:bzlib.h:沒有那個文件或目錄

sudo?yum?install?bzip2-devel

src/IceXML/Parser.cpp:7:19:?致命錯誤:expat.h:沒有那個文件或目錄

sudo?yum?install?expat-devel

安裝(默認安裝在/opt/Ice-3.7.3)

sudo?make?install

測試

1)編寫ice的slice配置文件

module?Demo?{ ????interface?Printer?{ ????????void?printString(string?s); ????}; };

?2)編譯Slice定義文件(生成Printer.h?和Printer.cpp)找不到slice2cpp,自己配置運行環境在/opt/Ice-3.7.3/bin中

slice2cpp?Printer.ice

3)編寫服務端,命名為Server.cpp

#include?<ice> #include?<printer.h> ? using?namespace?std; using?namespace?Demo; ? class?PrinterI?:?public?Printer?{ ????public: ????????virtual?void?printString(const?string&amp;?s,?const?Ice::Current&amp;); }; ? void? PrinterI::printString(const?string&amp;?s,?const?Ice::Current&amp;) { ????cout?createObjectAdapterWithEndpoints("SimplePrinterAdapter",?"default?-p?10000"); ????????Ice::ObjectPtr?object?=?new?PrinterI; ????????adapter-&gt;add(object,?ic-&gt;stringToIdentity("SimplePrinter")); ????????adapter-&gt;activate(); ????????ic-&gt;waitForShutdown(); ????}?catch?(const?Ice::Exception&amp;?e)?{ ????????cerr?destroy(); ????????}?catch?(const?Ice::Exception&amp;?e)?{ ????????????cerr?<p>4)編譯服務端</p><pre class="brush:sql;toolbar:false">c++?-I.?-I/opt/Ice-3.7.3/include?-c?Printer.cpp?Server.cpp c++?-o?server?Printer.o?Server.o?-L/opt/Ice-3.7.3/lib64?-lIce?-lpthread

5)編寫客戶端,命名為Client.cpp

#include?<ice> #include?<printer.h> ? using?namespace?std; using?namespace?Demo; ? int?main(int?argc,?char*?argv[]) { ????int?status?=?0; ????Ice::CommunicatorPtr?ic; ????try?{ ????????ic?=?Ice::initialize(argc,?argv); ????????Ice::ObjectPrx?base?=?ic-&gt;stringToProxy("SimplePrinter:default?-p?10000"); ????????PrinterPrx?printer?=?PrinterPrx::checkedCast(base); ????????if?(!printer) ????????????throw?"Invalid?proxy"; ? ????????printer-&gt;printString("Hello?World!"); ????}?catch?(const?Ice::Exception&amp;?ex)?{ ????????cerr?destroy(); ????return?status; }</printer.h></ice>

6)編譯客戶端

c++?-I.?-I/opt/Ice-3.7.3/include?-c?Printer.cpp?Client.cpp c++?-o?client?Printer.o?Client.o?-L/opt/Ice-3.7.3/lib64?-lIce?-lpthread

7)運行Server,然后運行Client,如果看到輸出Hello?World!則成功。

相關推薦:《Linux視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享