Quelle est la différence réelle entre Socket et RPC (Remote Procedure Call)?
D'après ce que j'ai compris, le travail des deux est basé sur Modèle client – serveur . Aussi lequel faut-il utiliser dans quelles conditions?
PS: la confusion survient lors de la lecture Concepts de système d'exploitation de Galvin
Réponse courte:
RPC est le protocole. Le socket fournit un accès au transport pour implémenter ce protocole.
RPC est le service et le protocole offerts par le système d'exploitation pour permettre au code d'être déclenché pour être exécuté par une application distante. Il a un protocole défini par lequel les procédures ou les objets peuvent être accédés par un autre appareil sur un réseau. Une implémentation de RPC peut être réalisée sur pratiquement n’importe quel transport réseau (par exemple, TCP, UDP, cups with strings).
Le socket est simplement une abstraction de programmation telle que l'application peut envoyer et recevoir des données avec un autre appareil via un transport réseau particulier. Vous implémentez des protocoles (tels que RPC) sur un transport (tel que TCP) avec un socket.
C'est spécifique au système d'exploitation. Alors lisez d'abord un bon livre de système d'exploitation comme Systèmes d'exploitation: Trois pièces faciles (téléchargeable gratuitement).
Les sockets réseau permettent de faire une communication interprocessus (notamment entre différentes machines). Lisez également à propos de l'API (prises Berkeley) , par exemple. (socket (7)) sur Linux.
Appels de procédure distante sont une technique de programmation (utilisant souvent socket (2) } appel système sous Linux). Chaque demande RPC attend exactement une réponse et est lancée par le logiciel.
Les sockets sont souvent également utilisés pour les messages asynchrones (par exemple, les protocoles X11pile , WebSocket s, SMTP ). Message qui passe est un paradigme de programmation (plus général que RPC), ils sont envoyés souvent sans attendre de réponse. Par exemple, le serveur X11 enverrait un message d'événement de clavier pour chaque pression sur une touche, etc.
(à certains égards, vous comparez des pommes et des oranges)
Si vous utilisez Linux, je vous recommande de lire Programmation Linux avancée (téléchargeable gratuitement).
PS: Une confusion survient lors de la lecture des concepts de système d'exploitation de Galvin
C'est ton problème là.
Un appel de procédure distante (RPC) est un modèle de haut niveau pour la communication réseau. Il existe de nombreux protocoles RPC existants. Dans le modèle RPC, votre implémentation sous-jacente crée un stub pour chaque procédure distante. Lorsque votre application appelle la "procédure distante", le stub emballe les paramètres, les envoie lors du travail suivant, appelle la version distante de la procédure, prend les valeurs de retour et les renvoie sur l'appelant via le réseau, le stub décompresse les valeurs de retour et votre application les reçoit ensuite.
Le modèle RPC est devenu tendance à la fin des années 1980. L'idée était qu'il serait transparent où vos fonctions s'exécutent réellement (dans votre processus, dans un autre processus, sur un autre ordinateur). Ce concept a été étendu aux objets distribués au début des années 1990 (par exemple, DCOM, CORBA).
Malheureusement, dans le monde réel, les applications devaient vraiment savoir si une procédure s'exécutait à distance en raison de la gestion des délais et des erreurs.
Quelque part dans l'implémentation RPC, une interface réseau est appelée.
Les sockets sont une telle interface réseau. Ils ne sont pas la seule interface de programmation, mais ils sont les plus courants sur les systèmes Eunuchs.
Ainsi, un RPCPOURRAITêtre implémenté à l'aide d'un socket.