10 个版本

使用旧的 Rust 2015

0.3.1 2017 年 4 月 23 日
0.3.0 2017 年 4 月 22 日
0.2.2 2017 年 3 月 9 日
0.1.5 2017 年 3 月 4 日

#43 in #packets

每月 31 次下载

BSD-3-Clause 许可

4MB
8K SLoC

C 5K SLoC // 0.1% comments Rust 3K SLoC // 0.0% comments Lua 192 SLoC // 0.0% comments

包含 (静态库,2MB) c/windows/sodium-debug.lib,(静态库,1.5MB) c/windows/sodium-release.lib

Travis Build Status

netcode.io

netcode.io 是一种简单的协议,用于在 UDP 上创建安全的客户端/服务器连接。

它专为像 agar.io 这样的游戏设计,这些游戏将玩家从主网站或网络后端转移到多个专用服务器实例,每个专用服务器都有一些最大玩家数。

它具有以下特性

  1. 面向连接
  2. 加密和签名数据包
  3. 所有数据包都通过 UDP 传输
  4. 只有经过身份验证的客户端才能连接到专用服务器

它的好处是什么?

简单性

netcode.io 是一种简单的协议,可以轻松地集成到客户端、专用服务器或网络后端中。

除了广泛使用和经过充分测试的 libsodium 以外,它没有其他外部依赖。

全双工数据传输

一旦建立了 netcode.io 连接,客户端和服务器就可以在任何速率双向交换数据。

没有头部阻塞

由于数据是通过 UDP 传输的,因此不受头部阻塞的影响。没有头部阻塞意味着游戏表现更好,因为时间序列数据(如玩家输入和对象位置)可以尽快传输,而无需等待丢失的数据包重新发送。

可以在网络后端执行连接速率限制

由于 netcode.io 服务器只接受短期连接令牌的客户端连接,因此可以将传统的网络速率限制应用于为经过身份验证的用户生成连接令牌的 REST 调用,而不是在 UDP 协议级别限制传入连接。

它是如何工作的?

请参阅本白皮书的后半部分: 为什么我无法从浏览器发送 UDP 数据包?

要获取完整的技术规范,请阅读 netcode 1.0 标准

我能做些什么来帮助?

这是一个开源项目,我们欢迎贡献。请加入我们!

以下是一些我们认为有帮助的事情

  • 对参考实现提供反馈
  • 研究代码,寻找缺陷和弱点
  • 为您的 favorite 语言创建 netcode.io 的绑定
  • 将 netcode.io 移植到您的 favorite 语言(例如 C#、Rust、Golang、Java、Lua、Python、Ruby...)
  • 欢迎任何愿意自愿对代码进行安全审计的人。
  • 开发测试框架,以确保不同语言的实现符合标准

如果您有更多想法,请告知我,并请随时提问和通过提交问题参与其中。

作者

本库的作者是Glenn Fiedler,他是游戏网络编程领域的知名专家,在游戏行业拥有超过15年的经验。

Glenn目前正在撰写一篇关于本库开发的系列文章,名为构建游戏网络协议

您可以通过Patreon支持Glenn撰写文章和开源代码。

赞助商

netcode.io 由以下机构慷慨赞助:

以及Patreon上的个人支持者。谢谢。您使这一切成为可能!

许可证

BSD 3-Clause许可证.

依赖项

~21MB
~190K SLoC