首頁 > web前端 > js教程 > 基於TCP的Pdata傳輸

基於TCP的Pdata傳輸

DDD
發布: 2024-12-29 06:34:13
原創
959 人瀏覽過

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 方法或在建立節點時傳遞配置物件。根據您想要建立程式碼的方式選擇方法。以下是兩種方法:

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方法用於發送加密訊息。在發送之前,它會檢查目標節點的公鑰是否可用:

  • 如果金鑰可用,訊息將被加密並立即發送。
  • 如果金鑰不可用,則節點向目標節點請求公鑰,然後加密並傳送訊息。

範例:

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

2. 發布 — 發送一條簡單訊息

publish 方法發送訊息時不加密。它只是將資料轉發到指定的節點。

範例:

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)的訊息

當另一個節點呼叫publish方法時,會產生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)

當另一個節點呼叫 send 方法時,會產生 CRYPTO_DM 類型的訊息。這些訊息以加密形式接收。

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 金鑰檢索逾時。

  • 解密錯誤

    無法解密訊息。

  • SEND_ERROR

    資料發送失敗。

  • PUBLISH_ERROR

    發布數據失敗。

以上是基於TCP的Pdata傳輸的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板