librg是一个轻量级库,充当数据传输库(网络、文件流等)和核心应用程序/游戏逻辑之间的中间件。
图书馆的主要职责包括:
该库的诞生是为了解决设置和管理多人游戏和专用游戏服务器流程的复杂性。它在剥离非必要的东西方面取得了很大的进展,慢慢地塑造成现在的形式,您今天就可以看到和使用。
通常,网络游戏世界由一组网络玩家和一堆网络实体组成。在实体和玩家之间建立同步关系的典型变体是建立Everything-to-Everyone连接。
这是要遵循的最基本的设置。然而,随着实体数量的增加,带宽效率变得相当低下。
使用 librg,您可以通过构建基于半径和可见性的实体关系来显着减少带宽使用。实体将仅与它们可见的玩家同步。
图书馆的整体界面是考虑到大多数网络图书馆的支持而设计的。
网络库必须支持:
char *
缓冲区差不多就是这样了!
支持哪些类型的库的列表:
ENet
GameNetworkingSockets
yojimbo
SLikeNet
KCP
Raknet
Websocket
WebRTC
UDP
或TCP
库注意:您可以查看 enet 的网络集成示例。
librg
是一个单头库,这意味着要使用它,您只需从该存储库的releases部分获取所述头文件的最新(或特定)版本,将其添加到您的项目中,然后开始享受它的好处。
或者,如果您对 CLI 感到满意,则可以执行以下操作;
curl -L https://github.com/zpl-c/librg/releases/latest/download/librg.h > librg.h
# OR
wget https://github.com/zpl-c/librg/releases/latest/download/librg.h -O librg.h
这是一个网络图书馆吗?
我可以使用任何网络库吗?
UDP
,最高级别为WebSocket
/ WebRTC
。存储库包含一堆*.h
和*.c
文件,但您却认为它是一个单标头库,这怎么可能?
librg 提供实体系统吗?
我如何打包数据,你们提供方法吗?
protobuf
、 flatbuffers
、 msgpack
等),或者自行实现。我看到你提到了块,这是否意味着我的游戏/应用程序应该基于块?
要阅读有关该库的详细文档、查看示例和快速入门指南,请访问我们的文档页面。
此外,您可以检查 code/apps 文件夹以获取实际的代码示例。
这是一个简单的示例,尝试复制该库如何在 4x4 块的简单 2D 世界上工作。对于更大尺寸的 3D 世界,一切都会以非常相似的方式运行,只是在 3 维中。
这张图展示了用于编码和解码数据的底层二进制协议的结构。生成的二进制缓冲区可以插入到任何其他缓冲区中,作为文件保存到磁盘,或使用任何可用的方法通过网络发送。将自定义数据与数据包中的每个实体放在一起,可以实现上下文相关的数据存储,从而扩展功能并允许内存和带宽高效的实体复制。
如果您在v6.0.0
版本之前使用过该库,建议阅读此处的迁移指南。
我们正在针对各种平台测试该库。该表提供了某种兼容性描述。如果您测试过,结果与表中的结果不同,请在issues中描述问题。
平台/结果 | 视窗 | macOS | Linux | iOS系统 | 安卓 | 树莓派 | 开放BSD | 自由BSD | 埃姆脚本 |
---|---|---|---|---|---|---|---|---|---|
❔ | 铛 | 铛 | 海湾合作委员会,铿锵 | 海湾合作委员会,铿锵 | 海湾合作委员会,铿锵 | ||||
✅ | 微软、明威 | 海湾合作委员会,铿锵 | 海湾合作委员会,铿锵 | EMCC |
如果您希望做出贡献、添加新功能、优化或整体改进,请参阅以下说明:
git clone https://github.com/zpl-c/librg.git
make
来构建所有项目并验证一切正常code/tests/
中添加测试make test
来检查如果您在Windows上工作,和/或无法使用make
,您还可以使用内置的cmake
配置文件来生成 Visual Studio 解决方案,以执行以下操作:
mkdir build
cd build
cmake ../misc -G"Visual Studio 16 2019"
(或您拥有的任何配置)cmake --open .
(用解决方案打开VS)对于开发人员来说,它提供了很好的好处: