2013-05-12 108 views
1

我正在製作一個程序,需要在我的網站上建立多個連接並保持打開幾個小時!所以,假設我想連接300-500個連接並保持5個小時,如果我爲每個連接使用線程,需要多少CPU?有沒有其他的方法來做到這一點,而不是使用線程,因爲它需要大量的CPU?什麼是同時建立多個連接的最佳方式?

+0

你有什麼控制權?你需要更明確嗎?你是否控制網絡服務器? – Henrik 2013-05-12 15:23:42

+2

請勿使用線程。使用線程解決這個問題就像僱用500名祕書發送500封信。 – 2013-05-12 15:31:37

+0

@EricLippert是的,我明白了。這就是爲什麼我要求一個替代解決方案,但我還沒有找到一個... – 2013-05-12 18:22:51

回答

1

使用異步套接字API。

異步服務器套接字例 http://msdn.microsoft.com/en-us/library/fx6588te.aspx

異步客戶端套接字例 http://msdn.microsoft.com/en-us/library/bew39x2a.aspx

使用異步服務器套接字 http://msdn.microsoft.com/en-us/library/5w7b7x5f.aspx

+0

這是服務器/客戶端的例子,但我的網站已經託管,我不能做任何改變atm。我將如何使用它? – 2013-05-12 12:52:13

+0

您是在編寫服務器還是Web應用程序(使用其他服務器,例如IIS或Apache)? – onon15 2013-05-12 14:37:29

+0

是的,我正在使用Apache。該網站是在PHP中。 – 2013-05-12 18:22:04

0

WCF是一個選項。另一個是考慮使用網絡庫,它可以讓您選擇使用線程或異步連接,NetworkComms.Netlidgren

聲明:我是NetworkComms.Net的開發人員。

-2

作爲應用程序消息協議的HTTP並不保持消息流的來回,但只交換單個對;一個請求和一個響應,所以從應用程序的角度來看,它是一個無連接協議。面向連接的TCP部分僅用於成功交付請求中的所有數據或響應中的所有數據。

因此,談論保持從服務器打開HTTP連接是沒有意義的。服務器可能會進行分塊編碼來假裝它可以發送多個回覆消息,但這不會憑經驗實現。

+0

無國界的你的意思。 – adt 2013-05-12 13:07:33

+0

我已更新文字以迴應您的評論。我不是用TCP的詞彙來說話,而是從應用程序協議的角度來講。我希望編輯改進了我想說的話。 – Henrik 2013-05-12 13:29:50

相關問題