RPC assíncrono

A RPC (Chamada de Procedimento Remoto Assíncrono) é uma extensão da Microsoft que aborda várias limitações do modelo RPC tradicional, conforme definido pelo OPEN Software Foundation–Distributed Computing Environment (OSF-DCE). O RPC assíncrono separa uma chamada de procedimento remoto de seu valor retornado, o que resolve as seguintes limitações do RPC tradicional e síncrono:

  • Várias chamadas pendentes de um cliente de thread único. No modelo RPC tradicional, um cliente é bloqueado em uma chamada de procedimento remoto até que a chamada retorne. Isso impede que um cliente tenha várias chamadas pendentes, enquanto ainda tem seu thread disponível para fazer outro trabalho.
  • Clientes lentos ou atrasados. Um cliente lento para produzir dados pode querer fazer uma chamada de procedimento remoto com dados iniciais e, em seguida, fornecer dados adicionais conforme eles são produzidos. Isso não é possível com o RPC convencional (síncrono).
  • Servidores lentos ou atrasados. Uma chamada de procedimento remoto que leva muito tempo para ser concluída vinculará o thread de expedição durante a tarefa. Com o RPC assíncrono, o servidor pode iniciar uma operação separada (assíncrona) para processar a solicitação e enviar de volta a resposta quando ela estiver disponível. O servidor também pode enviar a resposta incrementalmente à medida que os resultados ficam disponíveis sem precisar vincular um thread de expedição durante a chamada remota. Ao tornar o aplicativo cliente assíncrono, você pode impedir que um servidor lento acione desnecessariamente um aplicativo cliente.
  • Transferência de grandes quantidades de dados. Transferir grandes quantidades de dados entre o cliente e o servidor, especialmente em links lentos, vincula o thread do cliente e o thread do gerenciador do servidor durante a transferência. Com RPC e pipes assíncronos, a transferência de dados pode ocorrer incrementalmente e sem impedir que o cliente ou o servidor execute outras tarefas.

Você aproveita os mecanismos de RPC assíncronos declarando funções com o atributo [assíncrono]. Como você faz essa declaração em um arquivo de configuração de atributo (ACF), você não precisa fazer nenhuma alteração no arquivo IDL (Interface Definition Language) ; O RPC assíncrono não tem efeito no protocolo de transmissão (como os dados são transmitidos entre o cliente e o servidor). Isso significa que clientes síncronos e assíncronos podem se comunicar com um aplicativo de servidor assíncrono.

Esta seção apresenta uma visão geral de como desenvolver aplicativos distribuídos usando RPC assíncrono. A visão geral é apresentada nas seguintes seções: