实时java游戏:套接字或RMI

时间:2013-10-25 19:31:30

标签: java sockets rmi game-engine

我正在开发一款游戏,我想我会添加一个多人游戏选项。这是一个实时游戏,比如Snake或类似的东西,所以我正在快速更新精灵位置:

while (isRunning) {
   ...
   if (sprite instanceof PlayerSprite) {
            PlayerSprite player = ((PlayerSprite) sprite);
            collisionManager.checkCollision(player, map, elapsedTime, currTime);
            updatePosition(player, elapsedTime);
            player.animeUpdate(elapsedTime);
   }
   ...
}

我首先尝试使用RMI:我将每个位置存储在一个对象中,然后将其设置为远程。因此服务器和客户端都可以更新它。但正如我所说,它需要实时更新。 而RMI看起来并不能解决这个问题。但我真的是初学者,所以我不确定。

所以我的问题是:RMI或简单的IO(套接字)是实时游戏的最佳解决方案吗?

如果socket更好:我可以通过ObjectOutput / ObjectInput将位置存储对象发送到客户端,更新对象(并绘制到屏幕)然后将更新的对象发送回服务器,依此类推? / p>

提前致谢:)

3 个答案:

答案 0 :(得分:2)

  

所以我的问题是:RMI或简单IO(套接字)将是最好的   实时游戏的解决方案?

这个问题很容易回答。在两者之间,插座是要走的路。 RMI包含大量开销,这会减慢传输时间。实时的目标是尽可能缩短发送和接收信息之间的时间。

  

如果socket更好:我可以通过发送位置存储对象   ObjectOutput / ObjectInput到客户端,更新对象(并绘制到   屏幕)然后将更新的对象发送回服务器,并且   等等?

你可以,但如前所述,它很慢。您将需要使用具有客户端 - 服务器消息传递系统的库(我使用Kryonet)或编写您自己的协议。关键的事情,可能看起来很明显,是客户端和服务器有一种简单的方式相互理解。

答案 1 :(得分:1)

我不建议使用Socket或RMI!

在我看来,你应该使用REST服务来处理多人游戏。

答案 2 :(得分:1)

如果您需要速度,请不要将Java序列化用作it is much slower than JSON serialization

JSON is fine,我个人会尝试使用Google协议缓冲区的Akka Remote Actors,但需要学习。