kcp2k-rust
一个使用 Rust 实现的 KCP 协议库,采用 revel_cell 进行线程安全的 cell 管理。
简介
kcp2k-rust 是一个高性能的 KCP(快速可靠协议)实现,提供了客户端和服务器功能。KCP 是一个快速可靠协议,可以比 TCP 浪费 10%-20% 的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。
特性
- ✅ 客户端和服务器支持 - 提供完整的客户端和服务器实现
- ✅ 双通道传输 - 支持可靠(Reliable)和不可靠(Unreliable)两种传输通道
- ✅ 线程安全 - 使用
revel_cell 实现线程安全的 cell 管理
- ✅ 高度可配置 - 丰富的配置选项,包括缓冲区大小、MTU、窗口大小等
- ✅ 事件回调 - 支持连接、数据接收、错误和断开连接等事件回调
- ✅ 低延迟优化 - 默认启用 NoDelay 模式,支持快速重传和自定义更新间隔
安装
在 Cargo.toml 中添加依赖:
[dependencies]
kcp2k-rust = "1.0.0"
快速开始
服务器示例
use kcp2k_rust::kcp2k_server::Kcp2KServer;
use kcp2k_rust::kcp2k_config::Kcp2KConfig;
use kcp2k_rust::kcp2k_common::{Callback, CallbackType, Kcp2KChannel};
use kcp2k_rust::kcp2k_connection::Kcp2kConnection;
fn callback(conn: &Kcp2kConnection, cb: Callback) {
match cb.r#type {
CallbackType::OnConnected => {
println!("客户端已连接: {}", cb.conn_id);
}
CallbackType::OnData => {
println!("收到数据: {:?}", cb.data);
let _ = conn.send_data(&cb.data, cb.channel);
}
CallbackType::OnError => {
println!("错误: {}", cb.error);
}
CallbackType::OnDisconnected => {
println!("客户端已断开: {}", cb.conn_id);
}
}
}
fn main() {
let config = Kcp2KConfig::default();
let server = Kcp2KServer::new("0.0.0.0:3100".to_string(), config, callback);
loop {
server.tick();
}
}
客户端示例
use kcp2k_rust::kcp2k_client::Kcp2KClient;
use kcp2k_rust::kcp2k_config::Kcp2KConfig;
use kcp2k_rust::kcp2k_common::{Callback, CallbackType, Kcp2KChannel};
use kcp2k_rust::kcp2k_connection::Kcp2kConnection;
fn callback(conn: &Kcp2kConnection, cb: Callback) {
match cb.r#type {
CallbackType::OnConnected => {
println!("已连接到服务器");
let _ = conn.send_data(b"Hello, Server!".as_slice(), Kcp2KChannel::Reliable);
}
CallbackType::OnData => {
println!("收到服务器数据: {:?}", cb.data);
}
CallbackType::OnError => {
println!("错误: {}", cb.error);
}
CallbackType::OnDisconnected => {
println!("与服务器断开连接");
}
}
}
fn main() {
let config = Kcp2KConfig::default();
let client = Kcp2KClient::new(config, callback);
client.connect("127.0.0.1:3100".to_string());
loop {
client.tick();
}
}
配置选项
Kcp2KConfig 提供了丰富的配置选项:
pub struct Kcp2KConfig {
pub dual_mode: bool, pub recv_buffer_size: usize, pub send_buffer_size: usize, pub mtu: usize, pub no_delay: bool, pub interval: i32, pub fast_resend: i32, pub congestion_window: bool, pub send_window_size: u16, pub receive_window_size: u16, pub timeout: u64, pub max_retransmits: u32, pub is_reliable_ping: bool, }
自定义配置示例
let config = Kcp2KConfig {
no_delay: true,
interval: 10,
fast_resend: 2,
send_window_size: 64,
receive_window_size: 256,
..Default::default()
};
传输通道
库支持两种传输通道:
- Reliable(可靠通道) - 保证数据按顺序、完整地送达
- Unreliable(不可靠通道) - 不保证顺序和完整性,但延迟更低
conn.send_data(data, Kcp2KChannel::Reliable)?;
conn.send_data(data, Kcp2KChannel::Unreliable)?;
回调事件
回调函数会接收以下事件类型:
OnConnected - 连接建立时触发
OnData - 接收到数据时触发
OnError - 发生错误时触发
OnDisconnected - 连接断开时触发
每个回调包含:
conn_id - 连接 ID
channel - 数据通道类型
data - 接收到的数据(OnData 事件)
error - 错误信息(OnError 事件)
运行示例
项目包含一个完整的示例程序:
cargo run --example program
依赖
revel_cell - 线程安全的 cell 管理
socket2 - 底层 socket 操作
kcp - KCP 协议实现
log - 日志记录
文档
更多详细信息请参考 API 文档。
许可证
本项目采用许可证文件 LICENSE 中指定的许可证。
贡献
欢迎提交 Issue 和 Pull Request!
作者
仓库