2010-04-12 92 views
3

我打算在這個問題上做一點基準測試,我自己。但我認爲從「社區」獲得一些初步反饋意見會很好。有沒有人對這兩種技術的優缺點做過分析?我的想法:Web服務vs持久套接字

  • 與持久連接相比,打開和關閉Web服務調用的TCP/IP連接相對較爲昂貴。
  • 處理間歇性連接錯誤和狀態等等,使用基於Web服務的框架會更容易。
  • 你沒有看到使用網絡服務的魔獸世界。

一個問題,我似乎無法找到任何地方的答案(即使在這裏)......是單個網卡可以支持的持續連接數量的限制?

回答

1

你一起泡吧信息和交付方式。如果您在節省位數和重新安排片斷的情況下可以更快地使用消息,Web服務可能不是您的正確選擇。如果我假設您有相對較大的基於文本的消息,則Web服務可能適合您的需求。因此,這是我將如何回答你的想法:

  • 打開/關閉TCP連接:是的,這是相對昂貴的。 Web服務依靠HTTP(和TCP/IP)以下列方式提供幫助:
    • 如果單個客戶端必須發送大量消息,他們可能會通過「keep-alive」HTTP連接發送它們。
    • 您可以在您的Web服務器前放置負載平衡器,以進一步優化TCP層。它將處理連接的TCP/IP級別混亂,並且僅向您的Web服務器提供少量長期連接。
  • 處理斷斷續續的連接:HTTP是無狀態使得這更容易。
  • WOW與WS:我不確定所涉及的消息類型,但是WOW需要發送大量非常短的消息,HTTP頭本身可能會帶來太多的開銷以保證Web服務。

我不知道最後一個問題的確切答案。您的網絡服務器可以處理多少個連接,然後由您的操作系統以套接字數量的形式創建另一個連接,從而實現一個限制。

希望這會有所幫助。 -Raj

+0

謝謝,拉吉。我認爲在評估這兩種選擇時,發送消息的數量和大小的重要性是正確的。我也認爲,從傳輸方法vs協議的角度來看,這個問題是模糊的。 – user226662 2010-04-13 15:26:46

2

這是一個非常普遍的問題,是您明確提出的多個問題,還有更多問題與您可能會或可能不知道的相關問題有關。

一個問題是HTTP與其他協議(或消息交換模式,要準確)。 HTTP是request-response,許多通信模式不適合請求響應範例。持久連接允許更靈活的面向消息的協議,如典型的全雙工聊天交換模式。

既然你提到WOW,他們使用UDP而不是TCP。 TCP提供流保證語義,保證順序並且不重複。但爲了實現這個目標,需要付出沉重的代價才能獲得延遲。像WOW這樣的遊戲對延遲更感興趣,並且不關心訂單保證:最新的數據包是,總是最好,並且取代以前的任何數據包信息。

還有更多問題的表面下潛伏着:

  • 出站防火牆穿越(幾乎總是允許HTTP)
  • 是閱讀和理解HTTP頭
  • 向內NAT穿越問題
侵入代理

終於有問題你問:TCP套接字限制。它們取決於每個操作系例如,由於TCP端口耗盡,典型的開箱即用的Windows服務器將在大約1000個TCP套接字中窒息。它必須特別是tuned for higher numbers。即使調整,它也很難接近64K開放,正常運行的套接字。對於需要連接到數百萬客戶端的服務器,連接必須在中間層進行復用,並且消息傳遞協議必須準備好轉發引起的問題,最重要的是消息順序反轉。

這個問題空間很大,每座橋下都有很多龍。

+0

感謝您的回覆。關於端口耗盡的例子似乎更適用於客戶端計算機,它耗盡了可用於通信的「返回端口」數量,而不是單個端口上託管的服務器。 – user226662 2010-04-13 15:22:47

+0

accept socket與listen socket不同。服務器排空端口,實際上速度很快。 – 2010-04-13 16:35:30