9 个版本
1.0.0-rc.5 | 2024年2月9日 |
---|---|
0.8.1 | 2021年2月3日 |
0.2.5 | 2020年9月1日 |
0.2.3 | 2020年8月18日 |
0.0.10 | 2020年3月30日 |
#2624 in 神奇豆
在 5 crates 中使用
2.5MB
50K SLoC
Tari comms DHT 模块
Tari网络消息库。有关使用此库的更多信息,请参阅CommsBuilder。
lib.rs
:
Tari Comms DHT
概述
tari_comms_dht
crate 为 tari_comms
添加了DHT功能。它提供两组中间件(入站 和 出站),分别处理入站请求和出站消息。
连接到通讯
在 tari_comms
中,入站和出站消息通过两个mpsc发送/接收对连接。一个用于入站消息(接收 InboundMessage
),另一个用于出站消息(发送 OutboundMessage
)。
DHT模块由两个中间件层(如在 tower_layer::Layer
中)组成,形成入站和出站管道以增强消息。
入站消息流
InboundMessage
从接收的通讯通道(如进入 CommsBuilder::new().incoming_message_sink(sender)
的 mpsc 通道的接收端)接收。通常,使用来自 tari_comms::middleware
crate 的 ServicePipeline
来连接从通讯到中间件服务的流。
InboundMessage(comms) -> DHT Inbound Middleware ->
DhtInboundMessage
(domain)
DHT 输入中间件包括
- 指标:监控输入消息的数量
- 解密:反序列化和解密
InboundMessage
并生成 DecryptedDhtMessage。 - 去重:如果之前已经接收过该消息,则丢弃该消息。
- 日志记录:消息日志记录
- SAF 存储:将某些消息存储在 SAF 存储中供其他对等点使用。
- 消息存储:转发消息给其他对等点。
- SAF 消息处理器:处理 SAF 协议消息(SAF 消息请求、SAF 消息响应)。
- DHT 消息处理器:处理 DHT 协议消息(发现、加入等)
输出消息流程
OutboundMessage
发送到输出通讯通道(如进入 CommsBuilder::new().outgoing_message_stream(receiver)
的 mpsc 通道的接收端)。通常,使用来自 tari_comms::middleware
crate 的 ServicePipeline
来连接从域级别到中间件服务的流,以及一个 SinkMiddleware
来连接中间件到通讯中的 OMS。对 DHT 中间件的输出请求由从 Dht::outbound_requester
工厂方法获得的 OutboundMessageRequester
提供。
DhtOutboundRequest
(domain) -> DHT Outbound Middleware -> OutboundMessage
(comms)
DHT 输出中间件包括
- 广播层:根据接收到的
DhtOutboundRequest
消息的BroadcastStrategy 生成多个输出消息。对每个生成的消息调用
next_service
。 - 消息日志记录层。
- 序列化:将体包裹在一个 DhtOutboundMessage 中,序列化结果,构建一个
OutboundMessage
并调用next_service
。通常,next_service
将是一个SinkMiddleware
,它将消息发送到通讯消息。
依赖
~61MB
~1M SLoC