【问题标题】:Networking library compatible C and Java网络库兼容 C 和 Java
【发布时间】:2012-09-13 20:23:48
【问题描述】:

我打算开发一款具有多人游戏功能的安卓小游戏。我已经使用 eNet 库在 C++ 中制作了一个服务器框架,我想使用这个框架来制作服务器。

那么,有没有像 eNet 这样兼容 Java 和 C++ 的网络库?我知道存在 jEnet(但是 Java-enet-wrapper 已经过时了(https://github.com/csm/java-enet-wrapper),它还不成熟。

【问题讨论】:

    标签: java android c++ networking enet


    【解决方案1】:

    查看https://github.com/julienr/libenet-android

    在您的情况下,ENet 比 UDT 更可取,因为 UDT 可能是处理器密集型的,并且游戏服务至少希望有很多连接。不同之处在于 UDT 的拥塞控制实现对 CPU 的需求相对较高。 UDT 非常棒,但它更适用于长距离的大型、高带宽传输,而不是游戏中所需的小型、高延迟交易。

    另请注意,主流拥塞控制算法不适用于小型事务。它们通过监控事务中每个数据包的 RTT 和/或监控事务中的数据包丢失率来工作,当每个事务平均只有 1-2 个数据包时,这是没有实际意义的。拥塞控制协议的额外要求会影响延迟,即使如果传输保持较小,拥塞控制本身也可能永远不会参与。

    【讨论】:

      【解决方案2】:

      你可以试试 UDT:http://udt.sourceforge.net/

      我以前用它在 Java 和 C++ 进程之间进行通信取得了很好的成功。

      【讨论】:

      • 谢谢。我去看看。我也想试试 j-enet (github.com/csm/java-enet.git)。有人知道哪些版本的 j-enet 与 C++ enet 兼容吗?
      • UDT 与 enet 完全不同。 UDT 是面向吞吐量的,如果您正在寻找吞吐量,没有理由选择 TCP/IP 上的 UDP 库。此外,UDT 仅在有限的情况下有用,因为它的 CPU 负载。单次传输(即单个客户端)通常会消耗超过四分之一的 CPU(查一下)。选择 UDP 而不是 TCP 的原因只有两个,1) 延迟和 2) 连接范围(TCP 具有 1 对 1 连接模型,其中 UDP 可以支持 all-to-all)。面向吞吐量的服务通常是面向内容的,这意味着它们几乎不需要两者。
      • 别误会,UDT 以它自己的方式很棒(我记得读过一些关于它被用来在不到一个小时内传输超过 1 TB 的地图数据,如果我'我没有弄错)但这是在高 CPU 成本和低延迟并且不需要点对点类型的行为。如果您不是在寻找可扩展、低延迟的解决方案,尤其是具有比 TCP 更广泛的连接能力的解决方案,为什么要选择 UDP over TCP?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 2021-08-10
      相关资源
      最近更新 更多