ice(internet communications engine)是乙個物件導向的rpc框架,它可以幫助你輕鬆地構建分布式應用。通過使用ice,使用者可以將更多的注意力放在自己應用程式的邏輯上,至於底層網路程式介面的互動則由ice負責。通過使用ice,使用者不需要再為一些細節擔憂,例如開放式網路連線、網路傳輸的序列化和反序列化,以及連線的失敗重傳問題。
zeroc ice的客戶端和服務端的架構圖如下:
說明:本文介紹的demo程式是在centos 7上、使用c++語言開發的,對應的ice版本為3.6.4。
2.1 安裝ice
1. 新增ice的yum倉庫:
cd /etc/yum.repos.d
wget
2. 安裝ice:
yum install ice-all-runtime ice-all-devel
2.2 編寫slice定義檔案
開發ice程式的第一步就是編寫slice定義檔案,該檔案包含了ice應用程式需要用到的介面。
module demo ;
};
上面的slice定義檔案內,包括了demo模組,demo模組中又包含了hello介面。當前,hello介面僅提供了乙個操作:sayhello。sayhello操作的具體功能需要我們後續去實現。
2.3 編譯slice定義檔案
編譯前面編寫的slice定義檔案,生成編譯c++所需要的檔案,命令如下:
slice2cpp hello.ice
根據hello.ice,上面的命令會生成兩個檔案:hello.h和hello.cpp。其中:
hello.h:hello.h標頭檔案包含了slice定義檔案中定義的hello介面(當前,現在這個介面是以c++型別定義的),在客戶端與服務端的原始碼中都要包含hello.h。
hello.cpp:hello.cpp包含了hello介面的實現原始碼。這些原始碼包括了針對客戶端和服務端的(引數/返回值)型別指定及執行支援。例如,它包含了客戶端的引數資料序列化,以及服務端資料反序列化。在客戶端和服務端進行**編譯和連線的過程中,都需要包含hello.cpp。
說明:從架構角度看,由hello.ice生成的hello.h和hello.cpp,相當於c++的 proxies 和 skeletons。
2.4 編寫介面處理類宣告及實現**
建立介面處理類helloi,helloi繼承了生成類hello(由*.ice檔案生成)。在helloi中定義了(*.ice檔案中)sayhello操作的具體實現。
類helloi宣告**(helloi.h)如下:
#ifndef __helloi_h__
#define __helloi_h__
#include using namespace std;
class helloi : public demo::hello
;#endif
類helloi的實現**(helloi.cpp)如下:
#include #include using namespace std;
string helloi::sayhello(const string& s, const ice::current&)
注意:本文到現在為止,介紹的幾個檔案(hello.ice、hello.h、hello.cpp、helloi.h、helloi.cpp)為本zeroc ice系列部落格的demo搭建時使用的基礎框架檔案,後面對於zeroc各個應用模式的demo搭建,如無特殊說明,均沿用了這五個基礎檔案。現給出zeroc各應用模式的demo鏈結如下:
2.5 編寫服務端**
服務端**建立介面處理類helloi的例項,並將該例項關聯到指定的ice物件id(本例中ice物件id為「hello」),客戶端通過這個ice物件id呼叫服務端(介面處理類中定義的)方法。
服務端**(server.cpp)如下:
#include #include using namespace std;
int main(int argc, char* argv)
catch (const ice::exception& e)
catch (const char* msg)
if (ic)
catch (const ice::exception& e)
}return status;
}
2.6 編寫客戶端**
客戶端**通過服務端提供的ice物件id連線服務端,並呼叫(與該ice物件id)相關的方法。
客戶端**(client.cpp)如下:
#include #include using namespace std;
using namespace demo;
int main(int argc, char* argv)
string result = "";
result = hello->sayhello("liitdar");
cout << "client's result: " << result << endl;
}catch (const ice::exception& ex)
catch (const char* msg)
if (ic)
return status;
}
2.7 編譯生成客戶端和服務端的應用程式
編譯生成服務端應用程式(server),命令如下:
g++ -o server -i. server.cpp hello.cpp helloi.cpp -lice -liceutil -lpthread
編譯生成客戶端應用程式(client),命令如下:
g++ -o client -i. client.cpp hello.cpp -lice -liceutil -lpthread
2.8 執行服務端與客戶端程式
在乙個終端執行服務端程式,如下:
./server
新開啟乙個終端,執行客戶端程式,如下:
./client
正常情況下,我們能夠在上面的兩個終端中看到服務端與客戶端的資訊互動情況,如下:
【服務端】:
【客戶端】:
如果兩個終端中出現了上述資訊,說明demo程式部署成功了。
上述資訊互動過程為:
a)服務端啟動,等待客戶端連線;
b)客戶端連線服務端,傳送「liitdar」到服務端,呼叫服務端的sayhello方法(「liitdar」作為sayhello方法的引數);
c)服務端執行sayhello方法,並在終端上列印相關資訊;
d)服務端將sayhello方法的返回值返回給客戶端;
e)客戶端收到服務端的返回值,列印該返回值。
Xshell簡單介紹與作用
xshell 是乙個強大的安全終端模擬軟體,它支援ssh1,ssh2,以及microsoft windows 平台的telnet 協議。xshell 通過網際網路到遠端主機的安全連線以及它創新性的設計和特色幫助使用者在複雜的網路環境中享受他們的工作。xshell可以在windows介面下用來訪問遠端...
OC KVC與KVO簡單介紹
kvc即key value coding鍵值編碼,是指ios的開發中,可以允許開發者通過key名直接訪問物件的屬性,或者給物件的屬性賦值。inte ce person nsobject property nonatomic,assign int age property nonatomic,copy...
簡單介紹與電路簡化
很多初學電工學的人,可能一開始連最基本歐姆定律都忘了,所以我先來個簡單的介紹吧!電壓是u,電流是i,電阻是r。以及電導是g,電導高中沒有接觸但是也沒什麼好說的g 1 r 單位 s。歐姆定律 u ir變形式為 i u r r i r 串聯 併聯 電壓和電位 同一跟導線上的電位相同 電勢差是兩點之間的電...