TCPベースのPdata送信

DDD
リリース: 2024-12-29 06:34:13
オリジナル
945 人が閲覧しました

TCP-based Pdata transmission

ClapPeer - ノード間のメッセージ交換をサポートするノードの分散ネットワークを作成するためのライブラリです。ノードはプレーンなメッセージと暗号化されたメッセージの両方を交換できます。
https://github.com/DIY0R/clap-peer


コンテンツ

  • 特徴
  • ノードへの接続
  • メッセージの送信
  • メッセージの受信
  • エラー処理

特徴:

  • 中間ノードを使用したメッセージ送信。
  • メッセージループを防ぐための TTL メカニズム。
  • 暗号化されたメッセージ交換 (RSA AES)。

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' });
ログイン後にコピー
ログイン後にコピー

ノードへの接続

ノードに接続するには、.connect メソッドを使用するか、ノードの作成時に構成オブジェクトを渡すという 2 つの方法のいずれかを使用できます。コードをどのように構造化したいかに基づいて方法を選択してください。以下に 2 つのアプローチがあります:

1. .connect() メソッドを使用した接続:

const node = new ClapPeer(1001, 'A');
node.connect({ host: '127.0.0.1', port: 1002 });
ログイン後にコピー
ログイン後にコピー

ここでは、ノードを作成し、.connect() メソッドを呼び出して、ホストとポートのパラメーターを渡します。これにより、ノードの作成と接続ロジックを分離できます。

2. ノード作成時に構成オブジェクトを使用して接続:

const node = new ClapPeer(1002, 'A', { host: '127.0.0.1', port: 1002 });
ログイン後にコピー
ログイン後にコピー

この場合、ClapPeer オブジェクトの作成時に接続パラメータを直接渡します。この方法は、ノードの作成後すぐに接続する必要がある場合に便利です。

メッセージの送信

1. send — 暗号化されたメッセージの送信

send メソッドは、暗号化されたメッセージを送信するために使用されます。送信する前に、ターゲット ノードの公開キーが利用可能かどうかを確認します。

  • キーが利用可能な場合、メッセージは暗号化され、すぐに送信されます。
  • キーが利用できない場合、ノードはターゲット ノードに公開キーを要求し、メッセージを暗号化して送信します。

例:

node.send(node_2.nodeId, { text: 'Hello, secure world!' }).catch(error => {
  console.log(error);
});
ログイン後にコピー

2. パブリッシュ — プレーンメッセージの送信

パブリッシュ メソッドは暗号化せずにメッセージを送信します。指定されたノードにデータを転送するだけです。

例:

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

メッセージの受信

ノードはイベントをサブスクライブして、プレーンなメッセージと暗号化されたメッセージの両方を処理できます。


1. パブリッシュ (DM) からのメッセージの処理

DM タイプのメッセージは、別のノードがパブリッシュ メソッドを呼び出すときに生成されます。これらのメッセージは暗号化されず送信されます。

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. 送信 (CRYPTO_DM) からのメッセージの処理

CRYPTO_DM タイプのメッセージは、send メソッドが別のノードによって呼び出されたときに生成されます。これらのメッセージは暗号化形式で受信されます。

const node = new ClapPeer(1001, 'A');
node.connect({ host: '127.0.0.1', port: 1002 });
ログイン後にコピー
ログイン後にコピー

DM と 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.

エラー処理

ERROR イベントをサブスクライブして、すべてのエラーを処理できます。

const node = new ClapPeer(1002, 'A', { host: '127.0.0.1', port: 1002 });
ログイン後にコピー
ログイン後にコピー

messageError.message パラメーターには、次のメッセージのいずれかが含まれる場合があります:

  • TIMEOUT_ERROR_MESSAGE:

    ${TIMEOUT_DURATION / 1000} 秒後に近隣チェックがタイムアウトしました

  • TIMEOUT_ERROR_REQUEST:

    RSA キーの取得がタイムアウトしました。

  • DECRYPT_ERROR:

    メッセージを復号化できません。

  • SEND_ERROR:

    データの送信に失敗しました。

  • PUBLISH_ERROR:

    データの公開に失敗しました。

以上がTCPベースのPdata送信の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート