繁体   English   中英

实时Java游戏:Socket或RMI

[英]Real-time java game: Socket or RMI

我正在开发游戏,我想我会添加一个多人游戏选项。 这是一个实时游戏,例如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(插槽)将是实时游戏的最佳解决方案?

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

提前致谢:)

所以我的问题是:RMI或简单的IO(插槽)将是实时游戏的最佳解决方案?

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

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

您可以,但是如上所述,它很慢。 您将需要使用具有客户端服务器消息传递系统的库(我使用Kryonet )或编写您自己的协议。 看起来很明显的关键是,客户端和服务器之间有一种容易理解的方式。

我不建议使用Socket或RMI!

我认为您应该使用REST服务来处理多人游戏。

如果您追求速度,请不要使用Java序列化,因为它比JSON序列化要慢得多

JSON很好 ,就我个人而言,我将尝试使用Google协议缓冲区的Akka Remote Actors ,尽管它需要学习。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM