Maison >interface Web >js tutoriel >Transmission de données P basée sur TCP
ClapPeer - est une bibliothèque permettant de créer un réseau distribué de nœuds qui prend en charge l'échange de messages entre eux. Les nœuds peuvent échanger des messages clairs et cryptés.
https://github.com/DIY0R/clap-peer
const { ClapPeer, DM, CRYPTO_DM, ERROR, INVALID_CRYPTO_DM, } = require('clap-peer'); //Node - 1 const node_1 = new ClapPeer(1001, 'A'); node_1.on(DM, msg => console.log(msg)); node_1.on(CRYPTO_DM, msg => console.log(msg)); //Node - 2 const node_2 = new ClapPeer(1002, 'B'); node_2.connect({ host: '127.0.0.1', port: 1001 }); node_2 .send(node_1.nodeId, { hello: 'hello crypto' }) .catch(error => console.log(error)); node_2.publish(node_1.nodeId, { hello: 'just hello' });
Vous pouvez utiliser l'une des deux méthodes pour vous connecter à un nœud : via la méthode .connect ou en passant un objet de configuration lors de la création du nœud. Choisissez la méthode en fonction de la manière dont vous souhaitez structurer votre code. Voici les deux approches :
const node = new ClapPeer(1001, 'A'); node.connect({ host: '127.0.0.1', port: 1002 });
Ici, nous créons un nœud puis appelons la méthode .connect(), en passant les paramètres d'hôte et de port. Cela vous permet de séparer la logique de création de nœud et de connexion.
const node = new ClapPeer(1002, 'A', { host: '127.0.0.1', port: 1002 });
Dans ce cas, on passe les paramètres de connexion directement lors de la création de l'objet ClapPeer. Cette méthode est pratique si vous devez vous connecter au nœud immédiatement après sa création.
La méthode d'envoi est utilisée pour envoyer des messages cryptés. Avant l'envoi, il vérifie si la clé publique du nœud cible est disponible :
Exemple :
node.send(node_2.nodeId, { text: 'Hello, secure world!' }).catch(error => { console.log(error); });
La méthode de publication envoie des messages sans cryptage. Il transmet simplement les données au nœud spécifié.
Exemple :
node.publish(node_2.nodeId, { text: 'Hello, open world!', });
Method | Encryption | Public Key Check | Request Public Key if Needed | Routing Through Intermediate Nodes |
---|---|---|---|---|
send | ✅ | ✅ | ✅ | ✅ |
publish | ❌ | ❌ | ❌ | ✅ |
Un nœud peut s'abonner à des événements pour gérer à la fois les messages bruts et chiffrés.
Les messages de type DM sont générés lorsqu'un autre nœud appelle la méthode de publication. Ces messages sont transmis non cryptés.
const { ClapPeer, DM, CRYPTO_DM, ERROR, INVALID_CRYPTO_DM, } = require('clap-peer'); //Node - 1 const node_1 = new ClapPeer(1001, 'A'); node_1.on(DM, msg => console.log(msg)); node_1.on(CRYPTO_DM, msg => console.log(msg)); //Node - 2 const node_2 = new ClapPeer(1002, 'B'); node_2.connect({ host: '127.0.0.1', port: 1001 }); node_2 .send(node_1.nodeId, { hello: 'hello crypto' }) .catch(error => console.log(error)); node_2.publish(node_1.nodeId, { hello: 'just hello' });
Les messages de type CRYPTO_DM sont générés lorsque la méthode d'envoi est appelée par un autre nœud. Ces messages sont reçus sous forme cryptée.
const node = new ClapPeer(1001, 'A'); node.connect({ host: '127.0.0.1', port: 1002 });
Event | Method That Generates the Message | Message Type | Description |
---|---|---|---|
DM | publish | Plain text message | Handled as a regular, unencrypted message. |
CRYPTO_DM | send | Encrypted message | Sent and received in an encrypted form. |
Vous pouvez vous abonner à l'événement ERROR pour gérer toutes les erreurs.
const node = new ClapPeer(1002, 'A', { host: '127.0.0.1', port: 1002 });
Le paramètre messageError.message peut contenir l'un des messages suivants :
TIMEOUT_ERROR_MESSAGE :
La vérification des voisins a expiré après ${TIMEOUT_DURATION / 1 000} secondes
TIMEOUT_ERROR_REQUEST :
Le délai de récupération de la clé RSA a expiré.
DECRYPT_ERROR :
Impossible de déchiffrer le message.
SEND_ERROR :
Échec de l'envoi des données.
PUBLISH_ERROR :
Échec de la publication des données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!