我正在製作一個實時應用程序。我不能多說,但它是一個在線實時應用程序,需要儘可能少的延遲。我正在使用套接字,沒有圖書館。我也需要完整的bandwitdh。我應該使用TCP還是UDP?我不介意編程多一點讓UDP工作。提前致謝。C++遊戲應用程序UDP vs TCP
回答
取決於客戶端連接的性質。
TCP是有狀態會話。如果您同時連接了很多客戶端,則可能會造成端口耗盡。如果客戶端頻繁地連接和斷開連接,建立和拆除TCP會話會增加延遲,CPU負載和帶寬。如果您的客戶端連接或多或少是永久性的,並且沒有太多客戶端同時連接,則TCP只比UDP稍差。
UDP更適合低延遲通信。但是,請注意NAT防火牆 - 並非所有的功能都可以或爲UDP地址映射而設置。
也請注意,TCP是一個流,因此不提供消息打包。您的應用程序必須從TCP流組裝數據包,並帶來額外開銷。
UDP根據定義是一個完整的消息,即作爲發送的分組到達。請注意交付不能得到保證,應用程序可能需要提供確認和重新發送層。
TCP/IP實現一個流;也就是說,它希望通過另一端發送收件人發送的所有內容。爲此,它增加了許多協議,用於處理部分流缺失的情況 - 例如,它將重試發送,跟蹤它仍然需要發送多少字節(使用窗口)等。 TCP/IP連接用於添加流的保證;如果TCP/IP無法傳送數據包並且無法恢復,則連接將斷開。
UDP/IP實現了一個數據報 - 也就是說,它希望從A到B發送一個特定的數據包(大小有限)。如果一個數據報丟失,就沒有內建的方法來重發它。如果沒有丟失,UDP數據包將被丟棄。
UDP缺乏保證實際上是一種好處。假設你正在建模類似「健康」的東西 - 一個怪物在服務器上攻擊你兩次。您的健康從90下降到78,然後下降到60.使用TCP/IP,您必須首先收到78 - 所以如果該數據包被丟棄,它必須重新發送,並按順序 - 因爲這裏有一個數據流。但你真的不在乎 - 你的健康現在是60歲;你想嘗試獲得60分。如果78歲的時候你的健康已經下降到60歲,誰會在乎--78歲的歷史並且不再重要。你需要健康說60.
TCP也是一個好處 - 你不想在遊戲聊天中使用UDP。你希望所有對你說的話都是爲了你。
TCP還增加了擁塞控制;有了UDP,你必須實現它,或者不知怎麼的注意你扼殺了UDP,這樣它就不會使服務器和播放器之間的未知網絡特性飽和。
所以是的,你想使用「兩個」;但「重要性」並不完全是您需要瞄準的標準。使用TCP/IP傳送數據流,輕鬆實現擁塞控制等。使用UDP實時狀態以及其他情況下,流抽象會干擾目的而不是與其對齊。
UDP和TCP在延遲方面都有好處。如果所有以下爲真:
- 你有單一數據源在客戶端
- 發送小消息,但擔心自己的潛伏期
- 您的應用程序可以處理從時間失去消息時間
- 您的應用程序可以處理接收消息亂序
UDP可能是一個更好的選擇。 UDP也適用於將數據發送到多個recipiemts。
在另一方面,如果任一
- 如果上述任何不屬實
- 如果您的應用程序發送儘可能多的數據儘可能快地
- 您有多個連接,以維持
你應該使用TCP。
This post會告訴你爲什麼UDP不一定是最快的。
如果您打算通過TCP傳輸大量數據,您應該考慮bandwidth delay product的影響。儘管您似乎更關心延遲而不是吞吐量,但您可能會對此感興趣。
- 1. Android遊戲UDP/TCP?
- 2. Android上棋牌遊戲的應用程序Go遊戲應用程序
- 3. VS c#益智遊戲
- 4. C程序骰子游戲
- 5. TCP vs可靠的UDP
- 6. TCP vs UDP吞吐量
- 7. 一個簡單的多人遊戲的UDP或HTTP over TCP/IP
- 8. C#井字遊戲控制檯應用程序
- 9. VB:遊戲頂端的應用程序
- 10. 在離子應用程序Phaser遊戲
- 11. 優化我的遊戲應用程序
- 12. Process.Start未啓動遊戲應用程序?
- 13. 什麼GUI技術用於C#遊戲應用程序?
- 14. 使用c#sdk創建Facebook遊戲應用程序
- 15. C#在遊戲應用程序中保存密鑰
- 16. Windows窗體應用程序 - C#隨機數猜猜遊戲
- 17. C#TCP聊天應用程序線程
- 18. .net:使用UDP或TCP創建聊天應用程序?和XMPP
- 19. C++ directx遊戲:圖像vs頂點
- 20. C++井字遊戲程序優化
- 21. 作爲遊戲/應用程序的核心部分的遊戲/應用程序菜單
- 22. TCP vs Enet與大堂在線紙牌遊戲?
- 23. Java遊戲編程:JOGL vs LWJGL?
- 24. 沒有安裝程序的XNA遊戲應用程序
- 25. Objective-C OpenGL遊戲教程
- 26. C編程棋盤遊戲
- 27. 如何在遊戲中心應用程序中支持多個遊戲
- 28. 生命遊戲程序
- 29. UDP vs TCP for non-frequent input based game
- 30. udp vs tcp數據包丟失
實際上在這裏回答 - 既使用udp,也不使用重要更新的tcp,重要的使用tcp – 2014-08-30 23:48:40