rust 版本 libp2p 的长相不太行

66 天前
 tarscoding545
// 创建传输层(QUIC 和 TCP)
fn create_transport(keypair: &identity::Keypair) -> Result<libp2p::core::transport::Boxed<(PeerId, libp2p::core::muxing::StreamMuxerBox)>, Box<dyn Error>> {
    // 配置 QUIC 传输
    let quic_transport = quic::async_std::Transport::new(quic::Config::new(keypair))
        .map(|(peer_id, conn), _| (peer_id, libp2p::core::muxing::StreamMuxerBox::new(conn)));

    // 配置 TCP 传输(带 Noise 加密和 Yamux 多路复用)
    let tcp_transport = tcp::async_io::Transport::new(tcp::Config::default().nodelay(true))
        .upgrade(libp2p::core::upgrade::Version::V1)
        .authenticate(noise::Config::new(keypair)?)
        .multiplex(libp2p::yamux::Config::default())
        .map(|(peer_id, conn), _| (peer_id, libp2p::core::muxing::StreamMuxerBox::new(conn)));

    // 组合两种传输方式(QUIC 优先,TCP 作为备选)
    Ok(libp2p::core::transport::OrTransport::new(quic_transport, tcp_transport)
        .map(|either, _| match either {
            libp2p::futures::future::Either::Left((peer_id, conn)) => (peer_id, conn),
            libp2p::futures::future::Either::Right((peer_id, conn)) => (peer_id, conn),
        })
        .boxed())
}
1419 次点击
所在节点    程序员
6 条回复
tarscoding545
66 天前
QUIC 和 TCP 的俩 map 是真难看啊
InkStone
66 天前
没必要每个变量都用全称吧……import+alias 一下可以整洁很多。而且都 Box<dyn Error>了,不如直接 anyhow 得了。

另外你这俩 map 是一样的吧,完全可以封个函数。
ns09005264
66 天前
你为什么用这么长的包名,看花眼了。
sunnysab
66 天前
终于有人说了!整半天没整明白这个库,而且 Rust 版的更新慢一点
tarscoding545
56 天前
老哥们,改了:
pub fn create_swarm(
peer_id: PeerId,
transport: Boxed<(PeerId, StreamMuxerBox)>
) -> Result<Swarm<SwarmBehaviour>> {
let behavior = Behaviour::new(&peer_id)?;
let config = Config::with_tokio_executor();
let swarm = Swarm::new(transport, behavior, peer_id, config);
Ok(swarm)
}
tarscoding545
56 天前
全局使用的 tokio 运行时,但是框架很多库对 tokio 的支持层级不太统一,主要是 quic 协议这块,不过其他协议也有类似的问题给老哥们看下目前几个协议 tokio 特性的配置:
libp2p = { version = "0.55.0", features = [
"quic",
"gossipsub",
"tls",
"kad",
"ping",
"tcp",
"yamux",
"noise",
"macros",
"mdns",
], default-features = false }


libp2p-mdns = { version = "0.47.0", features = ["tokio"] }
libp2p-tcp = { version = "0.43.0", features = ["tokio"] }
libp2p-quic = { version = "0.12.0", features = ["tokio"]}
libp2p-swarm = { version = "0.46.0", features = ["tokio"] }
tokio = { version = "1.44.2", features = ["full"] },有不合理的地方老哥们指摘.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/1122811

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX