Maison interface Web js tutoriel Introduction aux principes d'implémentation du RPC (appel de procédure à distance) dans node.js_node.js

Introduction aux principes d'implémentation du RPC (appel de procédure à distance) dans node.js_node.js

May 16, 2016 pm 04:29 PM
node.js rpc 远程过程调用

Je viens d'entrer en contact avec RPC (remote procédure call), qui est une méthode qui permet d'appeler localement un programme sur une machine distante, j'ai vu une implémentation simple de nodejs, qui est très bien pour apprendre les principes de RPC : nodejs light_rpc

Exemple d'utilisation :

Copier le code Le code est le suivant :

//Serveur
var light_rpc = require('./index.js');
port var = 5556;
var rpc = nouveau light_rpc({
combiner : fonction (a, b, rappel){
         rappel(a b);
},
​ multiplier : fonction(t, cb){
         cb(t*2);
>
}).écouter(port);

Exemple de client :

Copier le code Le code est le suivant :

//Client
rpc.connect(5556, 'localhost', function(remote, conn){
Remote.combine(1, 2, function(res){
Si(res != 3){
console.log('ERREUR', res);
>
});
});

Parlez brièvement de l'ensemble du processus :

1. Le serveur démarre le programme, écoute le port, implémente les fonctions appelées par le client (telles que combiner et multiplier dans l'exemple ci-dessus) et les enregistre dans un objet.
2. Le client démarre le programme, se connecte au serveur et envoie la commande décrire une fois la connexion terminée, demandant au serveur de renvoyer le nom de fonction qu'il peut fournir pour l'appel.

Copier le code Le code est le suivant :

connexion.on('connect', function(){
connexion.write(command(descrCmd));
});

3. Le serveur reçoit la commande décrire, encapsule son nom de fonction appelable et l'envoie ("combiner", "multiplier")
4. Le client reçoit le nom de fonction envoyé par le serveur, l'enregistre dans son propre objet et encapsule une méthode pour chaque nom de fonction, de sorte que lors de l'appel de ces fonctions localement, il envoie réellement une requête au serveur :

Copier le code Le code est le suivant :

pour(var p dans cmd.data){
remoteObj[p] = getRemoteCallFunction(p, self.callbacks, connection);
//L'implémentation de getRemoteCallFunction est présentée ci-dessous
>

5. Le client appelle la fonction côté serveur :

1) Générez un identifiant unique pour la fonction de rappel entrant, appelé callbackId, et enregistrez-le dans un objet du client.
2) Regroupez les données suivantes et envoyez-les au serveur : nom de la fonction appelante, liste de paramètres sérialisés JSON, callbackId

Copier le code Le code est le suivant :

function getRemoteCallFunction(cmdName, rappels, connexion){
fonction de retour(){
var identifiant = uuid.generate();
Si (type d'arguments [arguments.length-1] == 'fonction'){
​​ rappels[id] = arguments[arguments.length-1];
>
var args = parseArgumentsToArray.call(this, arguments);
var newCmd = command(cmdName, {id : id, args : args});
Connection.write(newCmd);
>
>

6. Le serveur reçoit les informations ci-dessus, analyse les données, désérialise la liste des paramètres et appelle la fonction en fonction du nom de la fonction et des paramètres.

Copier le code Le code est le suivant :

var args = cmd.data.args;
args.push(getSendCommandBackFunction(c, cmd.data.id));
self.wrapper[cmd.command].apply({}, args);

7. Une fois la fonction terminée, sérialisez le résultat et renvoyez-le au client avec le callbackId précédemment reçu

Copier le code Le code est le suivant :

fonction getSendCommandBackFunction (connexion, cmdId){
fonction de retour(){
var innerArgs = parseArgumentsToArray.call({}, arguments);
var resultCommand = command(resultCmd, {id : cmdId, args : innerArgs});
Connection.write(resultCommand);
};
>

8. Le client reçoit le résultat de l'opération de fonction et le callbackId, retire la fonction de rappel basée sur le callbackId et transmet le résultat de l'opération dans la fonction de rappel pour exécution.

9. L'ensemble du processus est terminé, veuillez consulter le code source pour plus de détails : https://github.com/romulka/nodejs-light_rpc

Quelques points à noter :

1. Le client et le serveur restent connectés pendant tout le processus. Contrairement au protocole http, la connexion est déconnectée après l'envoi et la réception. Par conséquent, la fin d'une transmission de données ne peut pas être jugée en déconnectant la connexion. Afin de juger de l'achèvement de la réception des données, les données envoyées par le client et le serveur suivent un protocole simple : ajoutez la longueur du paquet de données et le délimiteur avant les données. Par exemple, le délimiteur est n : [longueur du paquet. data], de sorte qu'après avoir reçu les données, retirez d'abord la longueur du paquet de données, puis jugez en continu si les paquets de données accumulés reçus sont égaux ou supérieurs à cette longueur. Si tel est le cas, une transmission de données est terminée et vous pouvez. commencez à analyser et à extraire les données.

2. Ce RPC est simple car il ne prend pas en compte le type de fonction dans les paramètres. Par exemple, si le paramètre est un objet et qu'il y a des membres de fonction sous cet objet, la fonction sera ignorée lors de la sérialisation JSON, et ce. La fonction ne peut pas être exécutée côté serveur.

Pour résoudre ce problème, un traitement complexe est nécessaire :

1. Parcourez profondément chaque paramètre à envoyer à l'extrémité distante, extrayez les membres de la fonction, générez un identifiant unique pour cette fonction, placez-le dans un objet local, remplacez ce membre de la fonction par cette chaîne d'identification et identifiez-le. le membre est en fait une fonction. De cette façon, l'objet peut être sérialisé et envoyé.
2. Le serveur reçoit l'appel. Lorsqu'il souhaite utiliser la fonction dans l'objet paramètre, il détermine qu'il s'agit d'une fonction qui a été traitée par le client et qui possède un identifiant. Il renvoie l'identifiant au client et utilise l'identifiant. même méthode pour définir sa propre fonction de rappel. Transmettez l'identifiant au client et attendez le rappel du client.
3. Le client reçoit l'identifiant de fonction, trouve l'entité de fonction, l'appelle et, une fois terminé, la renvoie au serveur en fonction de l'identifiant de rappel donné par le serveur
4. Le serveur reçoit le résultat, trouve la fonction de rappel, poursuit l'exécution et termine.

La méthode d'enregistrement des fonctions peut être complétée par d'autres manières. L'idée générale est de remplacer la fonction par quelque chose qui peut être sérialisé et d'enregistrer la fonction afin que la fonction puisse être trouvée localement lorsqu'elle est appelée par le côté distant. Vous pouvez vous référer à l'implémentation de dnode.

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment réparer l'erreur d'échec de l'appel de procédure à distance dans Windows 11 Comment réparer l'erreur d'échec de l'appel de procédure à distance dans Windows 11 Apr 14, 2023 pm 06:25 PM

Un grand nombre d'utilisateurs Windows ont rencontré l'erreur « Échec de l'appel de procédure à distance » sur leurs ordinateurs. Généralement, cette erreur est signalée lors de la tentative d'ouverture de documents, de photos et d'applications Windows. Cette erreur est liée à l'appel de procédure à distance (RPC), qui est un protocole permettant de demander des services à un autre programme existant sur un autre système du réseau. Il est donc important que RPC soit toujours exécuté sur votre PC. Êtes-vous l'un de ces utilisateurs concernés par cette erreur d'échec de l'appel RPC sur un PC Windows ? Alors vous lisez le bon article. Dans cet article, nous avons sélectionné quelques solutions qui peuvent vous aider à résoudre ce problème sur votre ordinateur. Correctif 1 – Modifiez le programme par défaut configuré pour ouvrir certains

Solution à l'impossibilité de se connecter au serveur RPC et à l'impossibilité d'accéder au bureau Solution à l'impossibilité de se connecter au serveur RPC et à l'impossibilité d'accéder au bureau Feb 18, 2024 am 10:34 AM

Que dois-je faire si le serveur RPC est indisponible et n'est pas accessible sur le bureau Ces dernières années, les ordinateurs et Internet ont pénétré tous les recoins de nos vies. En tant que technologie de calcul centralisé et de partage de ressources, l'appel de procédure à distance (RPC) joue un rôle essentiel dans la communication réseau. Cependant, nous pouvons parfois rencontrer une situation dans laquelle le serveur RPC n'est pas disponible, ce qui entraîne l'impossibilité d'accéder au bureau. Cet article décrit certaines des causes possibles de ce problème et propose des solutions. Tout d’abord, nous devons comprendre pourquoi le serveur RPC n’est pas disponible. Le serveur RPC est un

Un article pour parler du contrôle de la mémoire dans Node Un article pour parler du contrôle de la mémoire dans Node Apr 26, 2023 pm 05:37 PM

Le service Node construit sur une base non bloquante et piloté par les événements présente l'avantage d'une faible consommation de mémoire et est très adapté à la gestion de requêtes réseau massives. Dans le contexte de demandes massives, les questions liées au « contrôle de la mémoire » doivent être prises en compte. 1. Le mécanisme de récupération de place du V8 et les limitations de mémoire Js sont contrôlés par la machine de récupération de place

Explication graphique détaillée de la mémoire et du GC du moteur Node V8 Explication graphique détaillée de la mémoire et du GC du moteur Node V8 Mar 29, 2023 pm 06:02 PM

Cet article vous donnera une compréhension approfondie de la mémoire et du garbage collector (GC) du moteur NodeJS V8. J'espère qu'il vous sera utile !

Parlons en profondeur du module File dans Node Parlons en profondeur du module File dans Node Apr 24, 2023 pm 05:49 PM

Le module de fichiers est une encapsulation des opérations de fichiers sous-jacentes, telles que l'ajout de lecture/écriture/ouverture/fermeture/suppression de fichiers, etc. La plus grande caractéristique du module de fichiers est que toutes les méthodes fournissent deux versions de **synchrone** et ** asynchrone**, with Les méthodes avec le suffixe sync sont toutes des méthodes de synchronisation, et celles qui n'en ont pas sont toutes des méthodes hétérogènes.

Parlons de la boucle d'événements dans Node Parlons de la boucle d'événements dans Node Apr 11, 2023 pm 07:08 PM

La boucle d'événements est un élément fondamental de Node.js et permet une programmation asynchrone en garantissant que le thread principal n'est pas bloqué. Comprendre la boucle d'événements est crucial pour créer des applications efficaces. L'article suivant vous donnera une compréhension approfondie de la boucle d'événements dans Node. J'espère qu'il vous sera utile !

PHP et SOAP : comment implémenter des appels de procédure à distance (RPC) PHP et SOAP : comment implémenter des appels de procédure à distance (RPC) Jul 29, 2023 pm 02:45 PM

PHP et SOAP : Comment implémenter l'appel de procédure à distance (RPC) Introduction : Ces dernières années, avec l'essor des systèmes distribués, l'appel de procédure à distance (RPC) a été largement adopté dans le développement Web. Cet article présentera comment implémenter RPC à l'aide de PHP et SOAP, et démontrera son utilisation à travers des exemples de code. 1. Qu'est-ce que l'appel de procédure à distance (RPC) ? L'appel de procédure distante (RemoteProcedureCall, RPC) est une communication

En savoir plus sur les tampons dans Node En savoir plus sur les tampons dans Node Apr 25, 2023 pm 07:49 PM

Au début, JS ne fonctionnait que du côté du navigateur. Il était facile de traiter les chaînes codées en Unicode, mais il était difficile de traiter les chaînes binaires et non codées en Unicode. Et le binaire est le format de données le plus bas du package ordinateur, vidéo/audio/programme/réseau.

See all articles