首页 >web前端 >js教程 >基于TCP的Pdata传输

基于TCP的Pdata传输

DDD
DDD原创
2024-12-29 06:34:13948浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn