| Crates.io | rustp2p-reliable |
| lib.rs | rustp2p-reliable |
| version | 0.1.0 |
| created_at | 2025-04-30 09:22:10.725703+00 |
| updated_at | 2025-04-30 09:22:10.725703+00 |
| description | Simple, fast and easy Nat traversal for peer-to-peer |
| homepage | |
| repository | https://github.com/rustp2p/rustp2p |
| max_upload_size | |
| id | 1654692 |
| size | 103,891 |
This crate is used for reliable transmission after hole punching, internally using TCP or KCP to achieve reliability.
It's a cross-platform crate
Add this dependency to your cargo.toml
rust-reliable = {version = "0.1"}
use rustp2p_reliable::LengthPrefixedInitCodec;
use rustp2p_reliable::{Config, Puncher};
use rustp2p_reliable::{TcpTunnelConfig, TunnelConfig, UdpTunnelConfig};
#[tokio::main]
async fn main() {
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init();
let udp_config = UdpTunnelConfig::default();
let tcp_config = TcpTunnelConfig::new(Box::new(LengthPrefixedInitCodec));
let config = TunnelConfig::empty()
.set_udp_tunnel_config(udp_config)
.set_tcp_tunnel_config(tcp_config)
.set_tcp_multi_count(2);
let config = Config::new(config);
let (mut listener, puncher) = rustp2p_reliable::from_config(config).await.unwrap();
// 1. The listener is used to listen for tunnels established after successful hole punching.
// 2. Use "puncher" for hole punching.
loop {
let reliable_tunnel = listener.accept().await.unwrap();
// "reliable_tunnel" is used for reliable transmission after successful direct connection through hole punching.
// "reliable_tunnel" uses TCP or KCP internally to implement reliable transmission.
}
}