2011-11-03 116 views
0

我有一個非常繁忙的自託管WCF服務器,需要2000+客戶端頻繁更新其狀態。我發現服務器的CPU利用率一直在70%左右,而客戶端有50%的機會實際連接到服務器。他們將在60秒後超時。這是有問題的,因爲如果服務器沒有收到客戶的迴應,它會認爲客戶端處於離線狀態。繁忙WCF服務策略

我實現節流,所以我可以調整併發連接數/會話/等,但如果我沒有記錯,這增加只會導致更高的CPU利用率和更糟糕的連接問題。對?

將超時增加到超過60秒的幫助嗎?我並不確定它是如何工作的,但是客戶端是否會坐在某種類型的隊列中,直到服務器發出請求?或者最好是將超時設置爲較小的值,並且如果客戶端無法連接,則會使客戶端更頻繁地檢查(這看起來似乎只會使問題在某種意義上變得更糟)?

+0

爲什麼服務器知道客戶端的任何信息? –

+0

您需要進行可靠的消息傳遞是最大的問題嗎?即需要確保您的郵件始終通過? –

+0

特里 - 是的,服務器會跟蹤已知在線的計算機列表。如果客戶端沒有報告,服務器會將其標記爲脫機,並通知管理員進行查看。顯然,如果客戶端無法與服務器通話,那麼會報告一堆虛假的「脫機」。 – bugfixr

回答

0

增加超時時間可能幫助,但可能不是很多,而驚人的不斷增加的超時是http://www.thedailywtf.com的一種圖案。如果客戶端第一次無法通過服務器,那麼客戶端就會錘擊服務器,這會讓服務器產生痛苦。

如果所有你關心的是瞭解客戶是否是存在的,它可能是實際走下來一或兩層,並有客戶曾經向您發送HTTP POST在一段時間? WCF需要一些主動來回,但POST可以放在那裏,直到你的服務器有時間處理它,客戶端可以發送它並忘記它。

+0

將使用WCF託管一個json風格的服務幫助任何在這裏?這也是一個HTTP帖子,但它是否需要某種類型的NetTCP WCF服務可以擁有? – bugfixr

1

如果它真的很重要服務器知道客戶端仍連接,我不認爲單靠WCF依賴是你最好的選擇。

也許您的服務器應該有某種形式的ping機制,要麼允許它基於某種計時器反之亦然ping通客戶機。

如果你是超級關注的消息總是通過獲取,不管是什麼,那麼我建議探索可靠的服務。查看enableReliableSession行爲屬性。我建議至少閱讀Juval Lowy的編程WCF服務的第一章,該書可免費作爲本書的Kindle樣本。