RPC asynchrone

L’appel de procédure asynchrone à distance (RPC) est une extension Microsoft qui répond à plusieurs limitations du modèle RPC traditionnel tel que défini par l’environnement OSF-DCE (Open Software Foundation-Distributed Computing Environment). Le RPC asynchrone sépare un appel de procédure distante de sa valeur de retour, ce qui résout les limitations suivantes du RPC synchrone traditionnel :

  • Plusieurs appels en attente à partir d’un client à thread unique. Dans le modèle RPC traditionnel, un client est bloqué dans un appel de procédure distante jusqu’à ce que l’appel soit retourné. Cela empêche un client d’avoir plusieurs appels en attente, tout en ayant son thread disponible pour effectuer d’autres tâches.
  • Clients lents ou retardés. Un client qui est lent à produire des données peut souhaiter effectuer un appel de procédure à distance avec des données initiales, puis fournir des données supplémentaires au fur et à mesure de leur production. Cela n’est pas possible avec le RPC conventionnel (synchrone).
  • Serveurs lents ou retardés. Un appel de procédure distante qui prend beaucoup de temps permet de lier le thread de répartition pendant la durée de la tâche. Avec rpc asynchrone, le serveur peut démarrer une opération distincte (asynchrone) pour traiter la demande et renvoyer la réponse lorsqu’elle est disponible. Le serveur peut également envoyer la réponse de manière incrémentielle à mesure que les résultats deviennent disponibles sans avoir à lier un thread de répartition pendant la durée de l’appel distant. En rendant l’application cliente asynchrone, vous pouvez empêcher un serveur lent de lier inutilement une application cliente.
  • Transfert de grandes quantités de données. Le transfert de grandes quantités de données entre le client et le serveur, en particulier sur les liaisons lentes, relie à la fois le thread client et le thread du gestionnaire de serveur pendant la durée du transfert. Avec le RPC asynchrone et les canaux, le transfert de données peut avoir lieu de manière incrémentielle et sans empêcher le client ou le serveur d’effectuer d’autres tâches.

Vous tirez parti des mécanismes RPC asynchrones en déclarant des fonctions avec l’attribut [async]. Étant donné que vous effectuez cette déclaration dans un fichier de configuration d’attribut (ACF), vous n’avez pas besoin d’apporter de modifications au fichier IDL (Interface Definition Language) ; le RPC asynchrone n’a aucun effet sur le protocole filaire (la façon dont les données sont transmises entre le client et le serveur). Cela signifie que les clients synchrones et asynchrones peuvent communiquer avec une application serveur asynchrone.

Cette section présente une vue d’ensemble de la façon de développer des applications distribuées à l’aide de RPC asynchrone. La vue d’ensemble est présentée dans les sections suivantes :