Compartilhar via


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, 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 que está lento para produzir dados pode querer fazer uma chamada de procedimento remoto com dados iniciais e, em seguida, fornecer dados adicionais à medida que 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 desnecessariamente empate um aplicativo cliente.
  • Transferência de grandes quantidades de dados. Transferir grandes quantidades de dados entre o cliente e o servidor, especialmente por 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 sobre o 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: