1 个不稳定版本
0.4.1 | 2021 年 4 月 21 日 |
---|
#9 在 #stronghold
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