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:
- declarando funções assíncronas
- RPC assíncrona do lado do cliente
- RPC assíncrona do lado do servidor
- ordenação causal de chamadas assíncronas
- tratamento de erros
- RPC assíncrono sobre o protocolo de pipe nomeado
- usando rpc assíncrono com pipes DCE
- de DCOM assíncrono