2017-01-23 128 views
0

遊戲即時通訊開發目前正在使用ServerSocket套接字提供多人遊戲。它不會在本地運行時滯後,所以即時通訊想知道是否應該通過TCP(ServerSocket,套接字)和UDP(DatagramSocket)重製多人遊戲結構。目前正如前面所提到的,只使用TCP,並且每秒只發送大約60個數據包(30個接收者和30個發送者),而不是在本地運行。多人遊戲網絡

在服務器和客戶端之間發送的信息:
移動,交易,ItemUsage,EnvironmentDetails等等。

所以我的問題是:

它會產生巨大的變化,如果我都使用TCP和UDP,而不是隻有TCP的?

如果我切換到TCP和UDP,我應該在每個協議中發送什麼?

在此先感謝!

編輯:

客戶:

實例化:this.out = new ObjectOutputStream(new BufferedOutputStream(this.requestSocket.getOutputStream())); this.in = new ObjectInputStream(new BufferedInputStream(this.requestSocket.getInputStream()));

發送:

this.out.writeObject(temp.toString()); this.out.flush();溫度是的JSONObject

服務器:

實例化:this.out = new ObjectOutputStream(new BufferedOutputStream(c.getOutputStream())); this.out.flush(); this.in = new ObjectInputStream(new BufferedInputStream(c.getInputStream()));

發送:this.out.writeObject(temp.toString()); this.out.flush();溫度是的JSONObject

+0

UDP可能會丟包,所以可能會丟失數據。這會不會對你的遊戲產生負面影響?我可以看到它可能是一個問題。 – Carcigenicate

+0

好吧,UDP本身不具有錯誤檢查的功能,所以它在理論上肯定會更快,只要你不需要一個準確的信息流。 – Mena

+0

也可能因爲您的代碼而滯後,具體取決於您的通信代碼如何處理事物。你沖洗你的流?您以什麼格式發送數據等等。 – Kayaman

回答

0

它會產生巨大的變化,如果我都使用TCP和UDP,而不是隻有TCP的?

是的。如果您使用UDP更新遊戲狀態,您將注意到更好的性能,因爲數據驗證不會發生。 UDP數據包被解僱,然後被遺忘。

另外,爲了提高性能,請限制您發送的數據量。如果您發送JSON,則每個字符都是一個完整字節。 30次更新可能會過多,因爲每33.3毫秒更新一次。爲了說明這一點,60赫茲的顯示器只會每16.7毫秒更新一次。

如果我切換到TCP和UDP,我應該在每個協議中發送什麼?

當您需要確保您的數據到達服務器或客戶端時,通常會使用TCP。在需要速度時使用UDP,並且可以處理丟失的數據包。如果使用UDP,則需要考慮代碼中可能發生的數據包丟失。