2016-06-16 96 views
-3

我有一些需要回答的问题。我想知道如果我序列化一个对象并发送它,或者如果我转储所需的变量并重新构建服务器端的游戏状态,性能会有什么差别。我很好奇的原因是因为我正在创建一个游戏,其中物理是由客户端和服务器处理的,并且为了确保它正常工作(并且没有人在攻击),我想知道什么是最好的课程的行动。获取当前游戏状态并通过互联网发送

一些信息: 它是一个用Libgdx API用Java编写的2D游戏,我目前使用netty作为我的网络后端。

我一直在做笔记从这里: http://gafferongames.com/networked-physics/the-physics-simulation/

+1

这是一个非常广泛的主题,可能是StackOverflow的焦点话题。简单的答案是以最适合您的方式编写代码,然后在后续优化时发现性能问题。请注意,_“序列化对象”_和_“转储所需的变量并重新构建服务器端的游戏状态”_两者的含义基本相同,但在第一种情况下使用内置序列化,在第二种情况下,自己的序列化代码。 –

+0

你确实提出了有效的观点,它基本上是一回事,而且我的措辞非常宽泛。我想知道序列化是否会引入瓶颈或什么,因为我以前从未使用它。但我会试试看。 –

回答

1

正如吉姆·加里森说,这是一个很广泛的问题,你应该先写你的代码,然后再优化它,但我会给你有关的几点建议相同。

您可以以任何您想要的方式发送数据,最初它是您更喜欢的内容。您可以使用序列化Java对象并通过网络发送它们开始。对于序列化数据,我建议你使用一些库,如Kryo,与内建Java序列化相比,它非常快速。按照link查看各种jvm序列化器的性能。

对于开始,您可以使用Kryonet用于编写网络代码的库。 Kryonet使用Kryo序列化器来序列化您的Java对象并通过网络发送它们。它也很容易使用。

稍后,您可以转移到名为Netty的网络库,它可以让您编写自己的协议。然后,如你所说,你可以写一些最适合你的协议。将Netty与Google's Protobuf配对,你会得到一个非常好的网络库和顶级串行器。我现在也一起使用它们,我喜欢使用protobuf和netty提供的对protobuf的内置支持来定义自定义消息的方式。

最后,就黑客入侵而言,它应该是一个完全不同的问题。一旦你的游戏成功了,你觉得人们想要破解你的游戏,那么你已经获得了足够的知识来了解如何避免相同:)

祝你好运!我希望答案能指出你正确的方向。

+0

我从来没有听说过Protobuf,但我会仔细研究它,因为我已经在使用Netty进行网络连接。 –