2009-07-28 75 views
44

我有一個Web應用程序坐在IIS上,並與[remote] Service-Machine交談。 我不確定是否選擇TCP或Http作爲主協議。TCP Vs. Http Benchmark

詳情:

  • 我將有一個以上的服務\端點
  • 它們中的一些將是單向
  • 另將兩路
  • 網頁將工作服務的盈
  • 我們正在談論喜規模的網站
  • 我很清楚這種差別,但我正在尋找一個很好的基準,這表明TCP有多快?

    +0

    這取決於你想要做什麼。你有更多關於網絡應用程序與之交談的服務的信息嗎?請求是一次性的(即問題,迴應)還是會話發生在幾個問題和迴應? – 2009-07-28 20:54:41

    回答

    68

    HTTP是一個建立在TCP層上的層,用來標準化數據傳輸。所以自然使用TCP套接字將比使用HTTP更不重要。如果性能是您關心的唯一事情,那麼純TCP就是您的最佳解決方案。

    您可能想考慮HTTP,因爲它的易用性和簡單性最終縮短了開發時間。如果你正在做一些可能被瀏覽器直接使用的東西(通過AJAX調用),那麼你應該使用HTTP。對於非現代瀏覽器直接使用沒有HTTP的TCP連接,您將不得不使用Flash或Silverlight,這通常發生在視頻和/或音頻等豐富內容上。但是,現在許多現代瀏覽器(截至2013年)都支持通過JavaScript直接訪問網絡,音頻和視頻資源的API。唯一需要考慮的是用戶中現代Web瀏覽器的使用率;有關瀏覽器兼容性的最新信息,請參閱caniuse.com

    至於基準,this是我發現的唯一的東西。見第5頁,它有性能圖。請注意,由於它將TCP/Binary數據選項與HTTP/XML數據選項進行比較,因此它並沒有將蘋果與蘋果進行真正的比較。這引出了一個問題:你的服務輸出什麼樣的數據?二進制(視頻,音頻,文件)或文本(JSON,XML,HTML)?

    一般來說,像軍事或金融領域的性能導向系統可能會使用普通的TCP連接。一般網絡公司會選擇使用HTTP並使用IIS或Apache來託管他們的服務。

    6

    您可以隨時對其進行基準測試。一般來說,如果你想要完成的任務可以很容易地通過HTTP完成(也就是說,否則你會考慮使用原始TCP的唯一原因是爲了提高性能),你應該只使用HTTP。當然,你可以做套接字編程,但爲什麼要麻煩?許多人花費了大量的時間和精力來構建HTTP客戶端庫和服務器,並且他們花費了更多的時間來優化和測試代碼,而不是可能花在TCP套接字上的時間。存在很多可能的錯誤,您必須處理,邊緣情況以及可以完成的優化,對HTTP使用庫函數通常更容易和更安全。

    另外,HTTP規範定義了各種功能(客戶端/服務器實現,您可以免費使用,即不需要額外的實現工作),這使得任何第三方互操作性變得更容易。 「這裏是我的網址,這裏是你發送的規則,這裏是我返回的規則......」

    +2

    警告 - 如果它是一個對話,但HTTP可能效率不高 - 通過打開TCP連接的多個請求每次都很昂貴,而且由於底層TCP連接沒有完全關閉,因此我看到服務器餓死了資源。是的,HTTP/1.1支持爲更多請求保持連接,但不清楚這種其他服務是否支持這種連接。 – 2009-07-28 21:17:05

    +2

    確實如此,但如果其他服務器確實支持它,那就是那些「免費」優化之一。至於沒有完全關閉的連接,這是圖書館中的一個錯誤,並且會是一個嚴重的問題,但再次,「自己動手」的情況下需要警惕可能導致相同資源的每種可能情況飢餓。 – 2009-07-28 21:21:26

    +0

    我不確定你在執行什麼意思?!使用WCF和net.tcp是非常簡單的,如果它會更快(並且創建Java代理,如果需要的話) 或者可能我們已經實現了java ... 所以它已經實現和測試, 只需要決定,不是嗎? – rabashani 2009-07-28 21:45:31

    29

    你真的需要一個答案的問題是「將TCP或HTTP更快爲我的申請「。答案是它取決於應用程序的性質,以及您在應用程序中使用TCP和/或HTTP的方式。通用的HTTP vs TCP基準測試不會回答您的問題,因爲基準測試可能不符合您的應用程序行爲。

    理論上,使用TCP的最佳設計/實現解決方案將比使用HTTP的解決方案更快。但是,根據您的應用程序的具體情況,實施...也可能需要更多工作。

    還有其他問題可能會影響您的選擇。例如,如果您使用HTTP,則不太可能遇到防火牆問題,而不是在某些隨機端口上使用TCP。另一個原因是HTTP可以更容易地在IIS服務器和後端系統之間實現負載平衡器。

    最後,在一天結束時,系統的可靠性,可維護性和(可能)可擴展性要比速度快很重要。一個明智的策略是首先實施簡單的版本,但是如何讓速度更快,您的腦海中會有計劃......如果簡單的解決方案太慢。