Maison >interface Web >js tutoriel >Transmission de données P basée sur TCP

Transmission de données P basée sur TCP

DDD
DDDoriginal
2024-12-29 06:34:13959parcourir

TCP-based Pdata transmission

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


Contenu

  • Caractéristiques
  • Exemple
  • Connexion à un nœud
  • Envoi de messages
  • Réception de messages
  • Gestion des erreurs

Caractéristiques:

  • Transmission de messages à l'aide de nœuds intermédiaires.
  • Mécanisme TTL pour éviter les boucles de messages.
  • Échange de messages cryptés (RSA AES).

Exemple

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' });

Connexion à un nœud

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 :

1. Connexion à l'aide de la méthode .connect() :

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.

2. Connexion à l'aide d'un objet de configuration lors de la création du nœud :

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.

Envoi de messages

1. envoyer — Envoi d'un message crypté

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 :

  • Si la clé est disponible, le message est crypté et envoyé immédiatement.
  • Si la clé n'est pas disponible, le nœud demande la clé publique au nœud cible, puis crypte et envoie le message.

Exemple :

node.send(node_2.nodeId, { text: 'Hello, secure world!' }).catch(error => {
  console.log(error);
});

2. publier — Envoi d'un message simple

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!',
});

Différences entre envoyer et publier :

Method Encryption Public Key Check Request Public Key if Needed Routing Through Intermediate Nodes
send
publish

Réception de messages

Un nœud peut s'abonner à des événements pour gérer à la fois les messages bruts et chiffrés.


1. Gestion des messages de publication (DM)

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' });

2. Gestion des messages envoyés (CRYPTO_DM)

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 });

Différences entre DM et CRYPTO_DM :

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.

Gestion des erreurs

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!

Déclaration:
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