博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
消息传递协议
阅读量:5037 次
发布时间:2019-06-12

本文共 2146 字,大约阅读时间需要 7 分钟。

对于分散的机器来说,一台机器与另一台机器对话的唯一方式是通过网络传递消息。我们在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的同类协议要高效得多。

 

转载于:https://www.cnblogs.com/v-haoz/p/9662156.html

你可能感兴趣的文章
Qss All
查看>>
C# 以ThreadStart方式实现多线程
查看>>
查询近一个月的表空间使用情况
查看>>
PTM人员(产品技术经理)
查看>>
Delphi 的RTTI机制浅探<一>
查看>>
SqlServer中循环和条件语句示例!
查看>>
Sokect异步连接发送
查看>>
Making HTML5 work in IE6, IE7 & IE8
查看>>
在ASP.NET 5中如何方便的添加前端库
查看>>
使用Visual Studio Code开发AngularJS应用
查看>>
8467:鸣人的影分身
查看>>
语法分析的那些算法
查看>>
jQuery each使用
查看>>
立即执行函数
查看>>
第四次寒假作业
查看>>
USE_FUNC.txt
查看>>
分享一下 Eclipse 插件 PyDev 的安装
查看>>
(转)Python3之os模块
查看>>
hdu 4038 stone
查看>>
ASP.NET 显示项目之外的图片
查看>>