ClapPeer - 是一个用于创建支持节点之间消息交换的分布式节点网络的库。节点可以交换明文和加密消息。
https://github.com/DIY0R/clap-peer
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 方法或在创建节点时传递配置对象。根据您想要构建代码的方式选择方法。以下是两种方法:
const node = new ClapPeer(1001, 'A'); node.connect({ host: '127.0.0.1', port: 1002 });
在这里,我们创建一个节点,然后调用 .connect() 方法,传递主机和端口参数。这允许您分离节点创建和连接逻辑。
const node = new ClapPeer(1002, 'A', { host: '127.0.0.1', port: 1002 });
在这种情况下,我们在创建ClapPeer对象时直接传递连接参数。如果您需要在创建后立即连接到节点,此方法很方便。
send方法用于发送加密消息。在发送之前,它会检查目标节点的公钥是否可用:
示例:
node.send(node_2.nodeId, { text: 'Hello, secure world!' }).catch(error => { console.log(error); });
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 | ❌ | ❌ | ❌ | ✅ |
节点可以订阅事件来处理明文和加密消息。
当另一个节点调用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' });
当另一个节点调用 send 方法时,会生成 CRYPTO_DM 类型的消息。这些消息以加密形式接收。
const node = new ClapPeer(1001, 'A'); node.connect({ host: '127.0.0.1', port: 1002 });
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中文网其他相关文章!