// 创建传输层(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())
}
1
tarscoding545 OP QUIC 和 TCP 的俩 map 是真难看啊
|
![]() |
2
InkStone 23 小时 22 分钟前 ![]() 没必要每个变量都用全称吧……import+alias 一下可以整洁很多。而且都 Box<dyn Error>了,不如直接 anyhow 得了。
另外你这俩 map 是一样的吧,完全可以封个函数。 |
![]() |
3
ns09005264 11 小时 55 分钟前
你为什么用这么长的包名,看花眼了。
|
![]() |
4
sunnysab 6 小时 19 分钟前
终于有人说了!整半天没整明白这个库,而且 Rust 版的更新慢一点
|