


Introduction aux principes d'implémentation du RPC (appel de procédure à distance) dans node.js_node.js
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 :
//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 :
//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.
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 :
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
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.
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
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.

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

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

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

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

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 !

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.

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 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

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.
