消息传递协议

对于分散的机器来说,一台机器与另一台机器对话的唯一方式是通过网络传递消息。我们在TSL基础中引入了协议的概念。三种协议构成额GE上各种分布是计算范式的基础。

消息处理流程:

GE采用请求和响应通信范式。扮演服务请求角色的程序成为服务器。响应的,向服务器发送请求的程序成为客户机。我们使用服务器或客户机来表示程序锁扮演的角色。一个程序可以同时充当服务器和客户端。

请求/响应消息格式的规范和服务器端消息处理逻辑一起成为GE协议。协议的请求和响应类似于本地函数调用的参数和返回值,但请求处理逻辑是在服务器端执行的。请求/响应可以是TSL中制定的用户定义数据结构,也可以是GE协议中的void

// A local function definition
Response func(Request myReq)
{
  // Request handling logic
}

GE支持三种类型的协议: 协议、异步协议和HTTP协议。

同步协议:

同步协议类似于普通的同步函数调用,只是调用时跨机器边界进行的。它通常用于在服务器端执行同步函数,并等待服务器端以阻塞的方式响应,如下面的时间序列图所示。

下面是一些同步协议示例:

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;
}

协议的请求和响应可能无效,如mySynProtocol2、 mySynProtocol3、 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的同类协议要高效得多。

 

posted @ 2018-09-17 14:55  v-haoz  阅读(100)  评论(0编辑  收藏  举报