libp2p有多种语言实现版本: libp2p的特性 长安链·ChainMaker底层链是用golang语言开发,所以长安链·ChainMaker 1.x的P2P网络也是用libp2p的golang语言实现go-libp2p 最新版本的go-libp2p已支持TCP/TLS、WebSocket、QUIC传输层实现。 2. go-libp2p的实现 在了解了libp2p的特性之后,我们一起走进go-libp2p的实现。 之前我们提到过libp2p是模块化的,go-libp2p的所有模块都是一个独立的工程,模块名及描述如下表: 模块/工程 描述 go-libp2p 总入口、装配线 go-libp2p-core 核心架构、
libp2p-rs 摈弃传统的 poll 方式,尝试完全使用 async/await 书写异步代码,系统框架主要参考 go-libp2p,部分代码重用 rust-libp2p,以此探索使用 async/ 短期目标为 go-libp2p 中 BasicHost 对应的功能,不涉及 Routing,因此可以看作为 libp2p 的一个子集。
• 关键依赖库升级,采纳go-libp2p、pebble和ipfs-webui多项最新优化。
github.com/libp2p/go-floodsub (该功能还没有纳入到IPFS协议的之功能里面,当前作为测试功能存在) libp2p(网络层): https://github.com/libp2p/go-libp2p
因此,笔者试图完全使用async/await方式重构libp2p,参考rust-libp2p的实现,代码协程化,向上层提供纯粹的异步接口,争取在API层面的体验接近go-libp2p,这是推广Rust协程机制的一个尝试