簡體   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