游戏网络中使用的常见方法是什么?

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

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

怎么做?我听说过Minecraft的协议投诉,因为如果您超出一个字节,则会破坏整个流。

原文链接 https://stackoverflow.com/questions/7248409

点赞
stackoverflow用户905181
stackoverflow用户905181

在谷歌上搜索“游戏网络库” 将会得到许多结果。GNE 是一个不错的选择。

2011-08-30 19:09:01
stackoverflow用户478108
stackoverflow用户478108

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

2011-08-30 19:21:03
stackoverflow用户492405
stackoverflow用户492405

游戏网络是一个泛泛之问,取决于你要解决哪种类型的问题。TCP 可能并不是你的正确选择。

例如 - 发送角色行动的游戏通常使用 UDP。原因是角色移动对于游戏的操作并不是关键的,因此一些移动数据的丢失是“可接受的”。这可能就是为什么有时候你的角色会“跳跃” - 一些UDP数据包被丢失或者严重失序。

UDP 被认为是网络游戏的首选协议。因此,在你开始之前,请仔细考虑你是否选择了正确的协议。

总的来说,我认为 Glenn Fiedler 开发网络游戏系列 是一篇绝妙的读物。我会从这里开始。他涵盖了使用 UDP 玩游戏的所有基础知识。

如果你想仅仅使用 TCP 来掌握 TCP - 那么 Minecraft 是一个合理的例子。一个已知的可发送和接收的命令列表是一个简单的开始方式。然而,正如你所说的,它容易出现一些问题。这更多的是与使用错误的协议有关,而不是与它的开发方式有关。

2011-08-30 19:49:56
stackoverflow用户255049
stackoverflow用户255049

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

2011-08-30 20:48:10
stackoverflow用户282536
stackoverflow用户282536

当你使用 Lua 进行编码时,现在唯一要用到的库就是 luasocket(尽管 ZMQ 正在走俏)。

你真的要使用多个协议:对于必须接收的数据(例如服务器命令,如 changemap 或 you_got_kicked、聊天等),使用 TCP 协议;然后对于不强制的数据或快速过期的数据(例如角色位置),使用 UDP 协议。

2011-09-01 00:10:20