我正在製作一個實時應用程序。我不能多說,但它是一個在線實時應用程序,需要儘可能少的延遲。我正在使用套接字,沒有圖書館。我也需要完整的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. HTTP vs TCP在線遊戲
- 3. 我應該爲我的Minecraft式遊戲使用UDP還是TCP?
- 4. 鏈接TCP應用程序和UDP應用程序
- 5. C++ VS C#開發的OpenGL的3D應用程序(不是遊戲)
- 6. Android上棋牌遊戲的應用程序Go遊戲應用程序
- 7. VS c#益智遊戲
- 8. C程序骰子游戲
- 9. UDP/TCP打孔vs UPnP vs STUN vs?
- 10. TCP vs UDP吞吐量
- 11. TCP流vs UDP消息
- 12. iOS遊戲和Facebook遊戲:相同的應用程序ID?
- 13. 一個簡單的多人遊戲的UDP或HTTP over TCP/IP
- 14. C#井字遊戲控制檯應用程序
- 15. HTML5遊戲到本地應用程序
- 16. iphone應用程序與遊戲中心
- 17. 測驗遊戲應用程序
- 18. 優化我的遊戲應用程序
- 19. 在離子應用程序Phaser遊戲
- 20. Java應用程序中的Flash遊戲
- 21. VB:遊戲頂端的應用程序
- 22. 遊戲中的Windows Phone應用程序
- 23. Process.Start未啓動遊戲應用程序?
- 24. 遊戲編程C
- 25. 在MFC應用程序中偵聽UDP或切換到TCP
- 26. 使用c#sdk創建Facebook遊戲應用程序
- 27. 什麼GUI技術用於C#遊戲應用程序?
- 28. TCP實時多人遊戲
- 29. 用於多人遊戲的UDP
- 30. C#TCP聊天應用程序線程
實際上在這裏回答 - 既使用udp,也不使用重要更新的tcp,重要的使用tcp – 2014-08-30 23:48:40