游戏网络中使用了哪些常用方法?

时间:2011-08-30 19:03:59

标签: networking lua

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

我不确定从哪里开始甚至定义/实现客户端和服务器使用的协议。我一直在环顾四周,我看过一些例子,例如Mojang的Minecraft,它使用一个'命令'表,客户端发送服务器,服务器发送客户端,带有多个参数等。

这样做的好方法是什么?我听说过有关Minecraft协议的投诉,因为如果你用一个字节重读,就会破坏整个流。

5 个答案:

答案 0 :(得分:2)

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

例如 - 发送字符移动的游戏通常使用UDP完成。原因是角色的移动对游戏的操作并不重要,因此一些数据丢失的运动是“可接受的”。这可能就是为什么有时你的角色“跳” - 一些UDP数据包丢失,或严重乱序。

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

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

如果你想使用TCP只是为了获得TCP的句柄 - 那么Minecraft就是一个合理的例子。可以来回发送的已知命令列表是一种简单的启动方式。但是,如你所说,容易出现一些问题。这与使用错误的协议更加一致,而不是如何开发。

答案 1 :(得分:0)

谷歌“游戏网络库”,你会得到一堆结果。 GNE是一个很好看的人。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

你真的会有几个协议:TCP必须接收的数据(例如,服务器命令,如changemap或you_got_kicked,对话等;然后使用UDP作为非强制数据,或快速过期的数据(例如,角色位置)。