[英]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.