【问题标题】:What are some common methods used in game networking?游戏联网中常用的方法有哪些?
【发布时间】:2011-09-01 08:10:20
【问题描述】:

所以我正在编写一个网络要求非常低的相当简单的游戏,我使用的是 TCP。

我什至不确定从哪里开始定义/实现供客户端和服务器使用的协议。我一直在环顾四周,看到了一些例子,例如 Mojang 的 Minecraft,它使用“命令”表,客户端发送服务器,服务器发送客户端,参数数量等。

有什么好的方法可以做到这一点?我听说过有关 Minecraft 协议的抱怨,因为如果您过度读取一个字节,就会破坏整个流。

【问题讨论】:

  • 什么语言?我假设是 c/c++/objc,但如果你使用的是 java 或其他诸如 GNE 之类的常见游戏网络库,则不适合你。
  • 我目前正在使用 Lua,如果需要性能(这不太可能),我以后可能会在服务器上使用 C。而且我想使用 TCP 来简单地学习如何做一些简单的网络。
  • 为什么要编辑这个标签来标记 Lua?这是一个与语言无关的问题...
  • @Mathew:我将其标记为 Lua,因为根据您上面的评论;您正试图在 Lua 中执行此操作。如果你觉得标签不属于你;而不是删除它。
  • @Matthew,我认为语言是相关的,否则反射之类的东西可以很好地工作(据我所知,仅在 Java 和 C# 中支持)

标签: networking lua


【解决方案1】:

游戏网络是一个广泛的问题,取决于您要解决的问题类型。 TCP(可能)甚至不是您的正确选择。

例如 - 发送角色移动的游戏通常使用 UDP 完成。原因是角色移动对游戏的运行并不重要,所以一些移动数据丢失是“可以接受的”。这可能就是您的角色有时会“跳跃”的原因——一些 UDP 数据包丢失或严重失序。

对于网络游戏,UDP 是 argued as the preferred protocol。因此,在您开始之前,请仔细考虑您是否选择了正确的协议。

总的来说,我认为Glenn Fiedler's series on developing a networked game 读起来很棒。我会从这里开始。他涵盖了使用 UDP 进行游戏的所有基础知识。

如果您只想使用 TCP 来获取 TCP 的句柄 - 那么 Minecraft 是一个合理的示例。可以来回发送的已知命令列表是一种简单的开始方式。但是,正如您所说,容易出现一些问题。与使用错误的协议相比,这更符合其开发方式。

【讨论】:

    【解决方案2】:

    谷歌“游戏网络库”,你会得到一堆结果。 GNE 值得一看。

    【讨论】:

    • 在这种情况下,只需从里到外学习sockets.h。在游戏客户端之间传递 UDP。一旦你深入研究,这很容易。
    【解决方案3】:

    我想这取决于你的游戏是什么,它的机制是什么,需要什么信息。无论如何,我认为这个堆栈交换https://gamedev.stackexchange.com/ 更适合回答您的问题。

    【讨论】:

      【解决方案4】:

      Gamedev.net 的网络论坛有一个很好的常见问题解答,涵盖了这类问题和许多其他问题,但是,为了使这不仅仅是一个“去那里看看”的答案,我会建议你做一些小的改进可以使。使用 tcp 时,交付是有保证的,但这有速度成本,如果你不制作 fps,这很好,但这意味着你需要从你发送的数据中获得更多,一个很好的方法是通过 deltas/差异,即仅发送状态变化,而不是整个游戏状态,您还可以通过预测可能性来验证传入数据包是否存在损坏/异常数据,并通过预测可能性进行有关 tcp 检查,并且使用相同的预测,您可以削减输出更多数据等。但正如其他人所说,这是一个广泛的问题,不适合获得真正的有用答案

      【讨论】:

        【解决方案5】:

        当您在 lua 中编码时,任何人都使用的唯一库是 luasocket(尽管 ZMQ 正在取得进展)。

        你真的会使用几种协议:TCP 用于必须接收的数据(例如,服务器命令,如 changemap 或 you_got_kicked、对话等;然后将 UDP 用于非强制性数据或快速过期的数据(例如,字符位置)。

        【讨论】:

          猜你喜欢
          • 2010-10-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-27
          • 1970-01-01
          相关资源
          最近更新 更多