Remote Invocation: RPC, RMI, SOAP, REST
服务器-客户端交换协议
三种CS交换协议

- R
- 不需要从服务器返回任何值-不需要确认。
- 客户“欲罢不能”;没有阻碍
- RR
- 典型的“请求-应答”协议。
- 如果来自服务器的应答丢失,请求将被重新发送即新的请求⇒,直到服务器回复通过
- RRA
- 服务器需要知道客户端是否收到了回复,以便删除不必要的资源,协调其他沟通等。
- 没有后续的重复事务
远程调用 Remote Invocation
远程调用是一种在不同地址空间(通常在不同的机器上)远程调用程序过程的机制。

远程程序调用 RPC
RPC是一种高级请求-响应机制,支持分布式系统中程序过程的远程调用。
它旨在实现分布的透明性:
- 使分布式系统的编程看起来与传统编程相似它支持调用位于单独地址空间(通常不在同一台机器上)的过程,就像它存在于本地地址空间中一样。
- 远程组件之间的交互是通过定义的接口完成的。

RPC和中间件的关系
eg: XML-RPC, JSON-RPC, EJB, GlassFish
RPC接口编程
TODO
RPC架构

Client
- 协议
- 伪装成远程接口的本地版本。
- 将调用重定向到客户端存根。
- 也可以执行其他必要的操作。
- 客户存根
- 客户机存根为输入IDL文件中定义的每个操作提供客户机上的代理入口点。
- 当客户端调用远程过程时,它的调用首先转到客户端存根封送参数-将输入参数打包成可以传输到服务器的形式。
- 调用客户端的运行时库,将参数传输到远程地址空间,以调用服务器地址空间中的远程过程。
- 解组输出参数。
- 客户机存根解包输出参数并返回给调用者。
Server
- 调度程序
- 接收传入消息并将其定向到适当的服务器存根。
- 服务器存根(骨架)
- 服务器存根为输入IDL文件中定义的每个操作提供服务器上的代理入口点。
- 当RPC运行时库调用它时,解组输入参数(从传输格式解包参数)。
- 调用服务器上过程的实际实现。
- 封送输出参数(将参数打包成传输的形式)。
RPC语义
要解决的任务让我们把重点放在RPC的通信模块上,它需要提供一个模仿本地过程调用语义的协议。
潜在的问题包括:
- 请求消息可能丢失。
- 回复信息可能会丢失。
- 客户端可能崩溃。
- 服务器可能崩溃。

中间件
是什么:中间件是一种计算机软件,它提供操作系统之外的服务,使分布式系统的组件能够通信和管理数据。
组成:
远程方法调用 RMI
REST和SOAP
SOAP (Simple Object Access Protocol)
- 一种用于开发和访问服务的RPC技术。
- 一种轻量级的基于xml的协议,它定义了web服务如何相互通信或如何与客户端通信。
- 独立于语言和操作系统(OS)——使用不同编程语言构建并运行在不同操作系统上的应用程序可以相互通信。
- 使用WSDL文档,用于访问SOAP服务的api。
REST (REpresentational State Transfer)
- 面向资源的web服务架构风格
- 无状态:服务器不存储客户端会话的任何状态没有会话!
- REST使用HTTP协议。
- REST仅使用URI访问资源和公开业务逻辑。
- REST支持多种数据格式,如纯文本、HTML、XML、JSON(最流行的)等——速度快,带宽需求少。
