Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking 在游戏网络中有哪些常用的方法?_Networking_Lua - Fatal编程技术网

Networking 在游戏网络中有哪些常用的方法?

Networking 在游戏网络中有哪些常用的方法?,networking,lua,Networking,Lua,所以我写了一个非常简单的游戏,网络要求非常低,我使用TCP 我甚至不确定从何处开始定义/实现供客户端和服务器使用的协议。我到处看看,我看到了一些例子,例如Mojang的Minecraft,它使用一个“命令”表,客户端发送服务器,服务器发送客户端,带有大量参数等等 做这件事的好方法是什么?我听人抱怨Minecraft的协议,因为如果你读了一个字节,就会破坏整个流。谷歌“游戏网络库”,你会得到一大堆结果。GNE将是一个很好的选择。我想这取决于你的游戏是什么,它的机制是什么,需要什么信息。无论如何,我

所以我写了一个非常简单的游戏,网络要求非常低,我使用TCP

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


做这件事的好方法是什么?我听人抱怨Minecraft的协议,因为如果你读了一个字节,就会破坏整个流。

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

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

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

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

UDP用于网络游戏。所以,在你开始之前,仔细考虑一下你是否在选择正确的协议。 总而言之,我认为读得棒极了。我从这里开始。他涵盖了使用UDP进行游戏的所有基础知识


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

Gamedev.net的网络论坛有一个很好的FAQ,涵盖了这类问题和许多其他问题,但是,为了让这不仅仅是一个“去那里看看那个”的答案,我建议您可以做一些小的改进。当使用tcp时,传输是有保障的,但这会带来速度成本,如果你不进行fps,这是可以的,但这意味着你需要从你发送的数据中获得更多,一个很好的方法是通过增量/差异,即只发送状态的变化,而不是整个游戏状态的变化,您还可以通过预测tcp检查的可能性来验证传入数据包是否存在损坏/异常数据,并且使用相同的预测,您可以剪切更多数据等。但正如其他人所说,这是一个广泛的问题,不适合在使用lua编码时获得真正有用的答案,任何人使用的唯一图书馆是(尽管正在取得进展)


您确实需要使用几个协议:TCP用于必须接收的数据(例如,服务器命令,如changemap或You_'t kick、对话等;然后使用UDP用于非强制数据或快速过期的数据(例如,字符位置).

什么语言?我假设使用c/c++/objc,但如果您使用java或其他常见的游戏网络库,如GNE,则不适用于您。我目前正在使用Lua,如果性能需要,我可能稍后在服务器上使用c(这不太可能)。我想用TCP简单地学习如何做一些简单的网络。为什么要编辑这个标签来标记Lua?这是一个与语言无关的问题…@Mathew:我将它标记为Lua,因为根据你上面的评论;你正试图在Lua中这样做。如果你觉得这个标签不属于你,那么就把它删除。@Matthew,我认为这个语言是相关的,o在这种情况下,反射之类的东西可以很好地工作(据我所知,只支持Java和C),只需从内到外学习sockets.h。在游戏客户端之间传递UDP。一旦你深入了解,这是非常简单的事情。