9 个版本

1.0.0-rc.52024年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 中使用

BSD-3-Clause

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