zoukankan      html  css  js  c++  java
  • 消息传递协议

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

  • 相关阅读:
    Java 编程下的并发线程之间的同步代码块死锁
    Java 编程下的同步代码块
    Android 编程下两种方式注册广播的区别
    Java 编程下泛型的内部原理
    Android 编程下使用 Google 的 Gson 解析 Json
    c# 调用音库开发英语单词记忆本
    在.Net中实现RichClient+Restful+JPA架构探索实现
    Extjs 常用正则式
    企业内IT部门的一些问题总结
    WinServer2003部署VS2010的水晶报表
  • 原文地址:https://www.cnblogs.com/v-haoz/p/9662156.html
Copyright © 2011-2022 走看看