消息傳遞協議

對於分散的機器來講,一臺機器與另外一臺機器對話的惟一方式是經過網絡傳遞消息。咱們在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的同類協議要高效得多。

相關文章
相關標籤/搜索