2008-12-16 17 views
-1

我有超過50個客戶端連接到一臺服務器(低端服務器,運行Windows 2003服務器),每次出現電源故障或交換機故障時,客戶端都將與服務器斷開連接,服務器可能在此次事件中保持開啓狀態(如果電源備份已安裝),當客戶端回來時,他們會自動檢測服務器並啓動連接過程,此時服務器將開始向客戶端分發相關數據。在這一點上,你意識到一些客戶端會開始凍結,因爲服務器不夠快,不能清除數據,因此會阻塞其他客戶端。什麼是控制客戶端連接到服務器的最佳算法/技術?

我已經實現了一個粗略的方法來控制這個客戶端風暴,但我問是否有更好的算法來執行這種任務。

注:我使用阿斯塔插座上Delphi應用程序組件,但我不來自不同領域的腦海例子,

回答

1

類似於網絡衝突檢測協議,也許客戶會等待一段隨機時間啓動其連接前在啓動?

0

除了不萊梅建議的隨機啓動延遲之外,在協議中實現某種「太忙,稍後再試」的消息。對於50,100,甚至1000個客戶端,拒絕客戶端使用短消息不應該是個問題。讓客戶做出隨機延遲並重試+指數退避。

+0

我通常會給你一個合理的建議,但他說他使用的是Win2k3。我知道,從每天的工作經驗來看,win2k3盒子(甚至是頂級盒子)不能處理超過500個客戶端,不僅僅是靜態頁面視圖。沒有理由認爲他的應用性能更好。 – rmeador 2008-12-16 05:05:10

0

解決方案也取決於您的偏好。你可以放下連接請求或發送忙信息嗎? 另一種選擇可能是您開始以循環方式向客戶端發送數據。爲此,您可以有不同的線程負責將數據發送到不同的客戶端。這種情況的好處可能是沒有一個客戶會餓死。

相關問題