Heim >Web-Frontend >js-Tutorial >TCP-basierte PDatenübertragung

TCP-basierte PDatenübertragung

DDD
DDDOriginal
2024-12-29 06:34:13948Durchsuche

TCP-based Pdata transmission

ClapPeer – ist eine Bibliothek zum Erstellen eines verteilten Netzwerks von Knoten, das den Nachrichtenaustausch zwischen ihnen unterstützt. Knoten können sowohl einfache als auch verschlüsselte Nachrichten austauschen.
https://github.com/DIY0R/clap-peer


Inhalt

  • Funktionen
  • Beispiel
  • Herstellen einer Verbindung zu einem Knoten
  • Nachrichten senden
  • Nachrichten empfangen
  • Fehlerbehandlung

Merkmale:

  • Nachrichtenübertragung über Zwischenknoten.
  • TTL-Mechanismus zur Vermeidung von Nachrichtenschleifen.
  • Verschlüsselter Nachrichtenaustausch (RSA AES).

Beispiel

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

Mit einem Knoten verbinden

Sie können eine von zwei Methoden verwenden, um eine Verbindung zu einem Knoten herzustellen: über die .connect-Methode oder durch Übergabe eines Konfigurationsobjekts beim Erstellen des Knotens. Wählen Sie die Methode basierend darauf, wie Sie Ihren Code strukturieren möchten. Hier sind die beiden Ansätze:

1. Verbindung mit der .connect()-Methode herstellen:

const node = new ClapPeer(1001, 'A');
node.connect({ host: '127.0.0.1', port: 1002 });

Hier erstellen wir einen Knoten und rufen dann die .connect()-Methode auf, wobei wir die Host- und Port-Parameter übergeben. Dadurch können Sie die Knotenerstellung und die Verbindungslogik trennen.

2. Verbindung über ein Konfigurationsobjekt während der Knotenerstellung herstellen:

const node = new ClapPeer(1002, 'A', { host: '127.0.0.1', port: 1002 });

In diesem Fall übergeben wir die Verbindungsparameter direkt beim Erstellen des ClapPeer-Objekts. Diese Methode ist praktisch, wenn Sie sofort nach der Erstellung eine Verbindung zum Knoten herstellen müssen.

Senden von Nachrichten

1. Senden – Senden einer verschlüsselten Nachricht

Die Sendemethode wird zum Senden verschlüsselter Nachrichten verwendet. Vor dem Senden prüft es, ob der öffentliche Schlüssel des Zielknotens verfügbar ist:

  • Wenn der Schlüssel verfügbar ist, wird die Nachricht verschlüsselt und sofort gesendet.
  • Wenn der Schlüssel nicht verfügbar ist, fordert der Knoten den öffentlichen Schlüssel vom Zielknoten an, verschlüsselt und sendet dann die Nachricht.

Beispiel:

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

2. veröffentlichen – Senden einer einfachen Nachricht

Die Veröffentlichungsmethode sendet Nachrichten ohne Verschlüsselung. Es leitet die Daten einfach an den angegebenen Knoten weiter.

Beispiel:

node.publish(node_2.nodeId, {
  text: 'Hello, open world!',
});

Unterschiede zwischen Senden und Veröffentlichen:

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

Empfangen von Nachrichten

Ein Knoten kann Ereignisse abonnieren, um sowohl einfache als auch verschlüsselte Nachrichten zu verarbeiten.


1. Verwaltung von Nachrichten aus Veröffentlichungen (DM)

Nachrichten vom Typ DM werden generiert, wenn ein anderer Knoten die Veröffentlichungsmethode aufruft. Diese Nachrichten werden unverschlüsselt übertragen.

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. Verwaltung von Nachrichten vom Senden (CRYPTO_DM)

Nachrichten vom Typ CRYPTO_DM werden generiert, wenn die Sendemethode von einem anderen Knoten aufgerufen wird. Diese Nachrichten werden verschlüsselt empfangen.

const node = new ClapPeer(1001, 'A');
node.connect({ host: '127.0.0.1', port: 1002 });

Unterschiede zwischen DM und 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.

Fehlerbehandlung

Sie können das ERROR-Ereignis abonnieren, um alle Fehler zu behandeln.

const node = new ClapPeer(1002, 'A', { host: '127.0.0.1', port: 1002 });

Der Parameter messageError.message kann eine der folgenden Meldungen enthalten:

  • TIMEOUT_ERROR_MESSAGE:

    Bei der Nachbarüberprüfung ist nach ${TIMEOUT_DURATION / 1000} Sekunden

  • eine Zeitüberschreitung aufgetreten
  • TIMEOUT_ERROR_REQUEST:

    Zeitüberschreitung beim Abrufen des RSA-Schlüssels.

  • DECRYPT_ERROR:

    Die Nachricht konnte nicht entschlüsselt werden.

  • SEND_ERROR:

    Die Daten konnten nicht gesendet werden.

  • PUBLISH_ERROR:

    Die Daten konnten nicht veröffentlicht werden.

Das obige ist der detaillierte Inhalt vonTCP-basierte PDatenübertragung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn