2014-12-08 64 views
0

我正在閱讀有關網絡編程的文章,並解釋了UDP與TCP的優缺點。UDP vs TCP for non-frequent input based game

但是,感覺這隻適用於需要持續輸入流的遊戲。我正在開發一款紙牌遊戲,我想知道創建多人遊戲功能UDP或TCP的最有效方法是什麼。我覺得UDP可能仍然是速度最好的選擇,但這引發了進一步的問題。

如果我使用UDP,在數據包丟失的可能性很小的情況下,我怎麼知道它丟失了,我該如何從損失中恢復?

回答

1

如何檢測消息的丟失?
接收者需要發回一些東西回原始發件人,告訴他收到了該消息。如果原始發件人在定義的時間段內沒有收到確認,它將重新發送消息。
另一種方法是每次默認發送每個消息多次,並讓接收器忽略重複。

這樣的規則可以任意複雜,最後你會重新實現TCP的一部分。您可能還需要確保消息的順序。

UDP適合頻繁更新,因爲它可以丟失一些消息(例如傳送視頻流或在第一人稱射擊遊戲中保持播放器位置同步)。紙牌遊戲節奏較慢,但需要可靠的有序消息。如果您不打算與數千個玩家舉辦遊戲會議,請使用TCP。速度足夠快並且更容易處理。

它只適用於不斷的輸入流?
即使您每分鐘只發送一條消息,TCP也能正常工作。術語「面向流」主要意味着接收者不知道消息的結束位置。例如,您必須在協議中提供該信息,方法是預先輸入消息長度。

如果你選擇UDP,你最好在它上面使用一個庫。