對於分散的機器來講,一臺機器與另外一臺機器對話的惟一方式是經過網絡傳遞消息。咱們在TSL基礎中引入了協議的概念。三種協議構成額GE上各類分佈是計算範式的基礎。服務器
消息處理流程:網絡
GE採用請求和響應通訊範式。扮演服務請求角色的程序成爲服務器。響應的,向服務器發送請求的程序成爲客戶機。咱們使用服務器或客戶機來表示程序鎖扮演的角色。一個程序能夠同時充當服務器和客戶端。數據結構
請求/響應消息格式的規範和服務器端消息處理邏輯一塊兒成爲GE協議。協議的請求和響應相似於本地函數調用的參數和返回值,但請求處理邏輯是在服務器端執行的。請求/響應能夠是TSL中制定的用戶定義數據結構,也能夠是GE協議中的void異步
// A local function definition
Response func(Request myReq)
{
// Request handling logic
}函數
GE支持三種類型的協議: 協議、異步協議和HTTP協議。spa
同步協議:線程
同步協議相似於普通的同步函數調用,只是調用時跨機器邊界進行的。它一般用於在服務器端執行同步函數,並等待服務器端以阻塞的方式響應,以下面的時間序列圖所示。rest
下面是一些同步協議示例:blog
struct MyRequest
{
string Value;
}
struct MyResponse
{
int32 Result;
}
同步
protocol mySynProtocol1
{
Type: Syn;
Request: MyRequest;
Response: MyRespone;
}
protocol mySynProtocol2
{
Type: Syn;
Request: void;
Response: void;
}
protocol mySynProtocol3
{
Type: Syn;
Request: MyRequest;
Response: void;
}
protocol mySynProtocol4
{
Type: Syn;
Request: void;
Response: MyResponse;
}
協議的請求和響應可能無效,如mySynProtocol二、 mySynProtocol三、 mySynProtocol4所示。
異步協議:
對於異步協議,服務器在收到消息後當即向客戶機返回確認。而後從線程池中選擇一個線程來處理接收到的消息,以下圖的序列圖所示。
這有一些例子:
struct MyRequest
{
string Value;
}
protocol myAsynProtocol1
{
Type: Asyn;
Request: MyRequest;
Response: void;
}
protocol myAsynProtocol2
{
Type: Asyn;
Request: void;
Response: void;
}
異步協議不能向客戶機返回任何用戶定義的數據,由於服務器在發送回確認以前不會等待處理程序的完成。所以,異步協議的響應必須爲空,而請求能夠是用戶定義的消息或空。從客戶機的角度來看,異步調用返回的事實只意味着遠程對等點成功接收了消息。
HTTP協議:
HTTP協議是同步遠程過程調用。他是同步協議的RESTful版本。他的時間序列圖於同步協議幾乎相同,只是請求和響應是Json結構。
這有一些HTTP API例子:
struct MyRequest
{
string Value;
}
struct MyResponse
{
int32 Result;
}
protocol myHttpProtocol1
{
Type: Http;
Request: MyRequest;
Response: MyRespone;
}
protocol myHttpProtocol2
{
Type: Http;
Request: void;
Response: void;
}
protocol myHttpProtocol3
{
Type: Http;
Request: MyRequest;
Response: void;
}
protocol myHttpProtocol4
{
Type: Http;
Request: void;
Response: MyResponse;
}
與同步協議同樣,請求和響應能夠是空的或用戶定義的數據結構。GE將爲每一個Http協議啓動一個RESTful Http API端點。
http://example.com/myHttpProtocol1/
http://example.com/myHttpProtocol2/
http://example.com/myHttpProtocol3/
http://example.com/myHttpProtocol4/
HTTP協議應該用於提供RESTful服務端點。他們不用於服務器間通訊。每當咱們須要在服務器之間進行消息傳遞是,咱們都應該使用同步或異步GE協議:在這方面,他們比基於rest的同類協議要高效得多。