4个版本 (2个破坏性更新)

0.3.0 2020年4月5日
0.2.0 2020年3月24日
0.1.1 2020年3月23日
0.1.0 2020年3月23日

#1325 in 编码

MIT许可证

69KB
1.5K SLoC

netstack

为游戏提供的电池式网络库。

crates.io 📦

[dependencies]
netstack = "0.3.0"

docs.rs 🗎

文档(工作正在进行中)

联系 💬

如果您有建议、缺少功能或只是想联系我,您可以在本仓库中打开问题,或在我twitter上找到我。

需求 ❗

为了在生产中有效地使用netstack,您需要一个安全通道来交换初始密钥和连接令牌。建议使用https,但这取决于您。示例使用http服务器。

特性 ☑️

(☑️表示已实现,🚧表示计划或开发中)

  • ☑️ UDP传输
  • ☑️ 连接管理(连接、心跳、超时、断开连接 🚧)
  • ☑️ 数据包签名(HMAC SHA256)
  • ☑️ 数据包确认(序列号、确认、重放保护)
  • 🚧 宏推导以简化二进制序列化
  • 🚧 监控
  • 🚧 缓冲区管理
  • 🚧 在数据包签名(更大的数据包头)和加密(更消耗CPU)之间切换

非目标 ❌

基于事件的I/O

基于 io_uringIOCPepoll 的传输目前不在范围内。

可靠传输

此crate不实现基于确认和超时的重传。游戏有其他方式实现可靠性,主要是因为在基于超时的机制检测到丢失的数据包之前,信息已经过时。

例如,FPS在每次数据包中发送最后几个帧的玩家输入,所以当一个在网络上丢失时,下一个数据包会填补这个空缺。

从服务器到客户端的游戏状态压缩通常基于客户端确认的最后一个数据包。使用MessageAcknowledged事件和send返回的序列号来完成此操作。

示例 🔌

请参阅示例目录中的客户端/服务器示例,使用命令运行它们。

  • 服务器: cargo run -p server
  • 客户端: cargo run -p client

netstack_derive 🚧

Netstack 包含一个用于结构体(以及后续枚举)的“正在进行中”的 derive 宏。

#[derive(Debug, Serialize, Deserialize)]
pub struct Greeting {
    pub id: u32,
    pub to: String,
    pub message: String,
}

许可证 📃

MIT

依赖项

~1.5MB
~36K SLoC