1 个不稳定版本

0.4.1 2021 年 4 月 21 日

#9#stronghold

Apache-2.0

100KB
1.5K SLoC

Stronghold Communication

此库允许不同设备和不同网络上的 Stronghold 之间进行通信。其功能的主要基础是 rust-libp2p 库,这是一个协议、规范和库的系统,它使开发对等网络应用程序成为可能 (https://libp2p.io/)。

网络行为和群体

模块行为.rs

Stronghold-communication 实现了 P2PNetworkBehaviour,用于发送消息并对操作结果做出反应。它结合了 Libp2p 的多个协议

  • 根据 Yamux 规范 进行复用
  • Noise:使用 XX-Handshake 通过 Noise 协议 加密通信
  • 多播 DNS:在本地网络中启用对等方发现
  • 身份协议:在连接到新对等方时接收标识信息,如 PeerId 和监听地址。
  • 请求-响应协议:允许对等方之间发送直接的请求/响应消息;它期望每个请求都有响应

创建新实例时,会创建和升级一个传输,并将其与ExpandedSwarm结合成一个ExpandedSwarm。这个Swarm返回给调用者,作为与其他对等方通信的入口点。除了ExpandedSwarm的Libp2p方法外,它还允许发送出站消息,并管理已知对等方。可以通过从swarm轮询来处理传入的P2PEvents,例如通过next方法。

通信演员

模块 actor.rs

Communication Actor使用Riker Framework来实现actor模式。
创建新的Communication Actor时,actor创建一个P2PNetworkBehaviour并持续轮询事件,传入的请求发送到在CommunicationConfig中必须提供的客户端actor。

所有swarm交互和Communication Actor的配置都是通过向它发送适当的CommunicationRequest来完成的,对于每个CommunicationRequest,都会将CommunicationResults返回给发送者,这也允许使用ask模式

防火墙

通信actor实现了一个防火墙,该防火墙检查每个出站和入站请求的权限,如果未设置必要权限,则将其丢弃。可以使用communication-macros推导出消息所需的ToPermissionVariants特质,这允许在枚举请求类型的情况下接受特定的变体,同时拒绝其他变体。

依赖关系

~21–37MB
~644K SLoC