异步 RPC

异步远程过程调用 (RPC) 是一个 Microsoft 扩展,可解决开放软件基础分布式计算环境 (OSF-DCE) 定义的传统 RPC 模型的多个限制。 异步 RPC 将远程过程调用与其返回值分开,这解决了传统同步 RPC 的以下限制:

  • 来自单线程客户端的多个未完成调用。 在传统的 RPC 模型中,客户端在远程过程调用中被阻止,直到调用返回。 这可以防止客户端具有多个未完成的调用,同时仍允许其线程执行其他工作。
  • 客户端速度缓慢或延迟。 生成数据速度缓慢的客户端可能需要使用初始数据进行远程过程调用,然后在生成数据时提供其他数据。 这在传统的 (同步) RPC 中是不可能的。
  • 服务器速度缓慢或延迟。 需要很长时间才能完成的远程过程调用会在任务期间绑定调度线程。 使用异步 RPC,服务器可以启动单独的 (异步) 操作来处理请求,并在请求可用时发送回答复。 服务器还可以在结果可用时以增量方式发送答复,而无需在远程调用期间占用调度线程。 通过使客户端应用程序异步,可以防止速度缓慢的服务器不必要地将客户端应用程序连接起来。
  • 传输大量数据。 在客户端和服务器之间传输大量数据(尤其是通过慢速链接传输),在传输期间,客户端线程和服务器管理器线程都连接起来。 使用异步 RPC 和管道,可以增量方式进行数据传输,而不会阻止客户端或服务器执行其他任务。

通过使用 [async] 属性声明函数,可以利用异步 RPC 机制。 由于在 ACF) 的属性配置文件 (进行此声明,因此无需对接口定义语言 (IDL) 文件进行任何更改;异步 RPC 对线路协议 (客户端和服务器) 之间传输数据的方式没有影响。 这意味着同步客户端和异步客户端都可以与异步服务器应用程序通信。

本部分概述了如何使用异步 RPC 开发分布式应用程序。 以下各节中提供了概述: