對於實時采集數據的項目,應用場景比如是這樣的:5000客戶端,每個客戶端每隔500MS要給服務器上傳一次數據。
大家知道,像INDY這種阻塞型的通信控件,所能支持的TCP長連接的一般地不能超過1000的數量(如果想要維持穩定運行的話)。
原因是大家都曉得的,阻塞方式會為每一個SOCKET連接創建一個新的線程為之服務,而WINDOWS單個進程理論上允許最多的線程數量是2048個,
實際當中要少得多才行。
有人說可以用WINDOWS的IOCP通信模型解決,誠然!但IOCP編程過於復雜。
有人說,可以用INDY,使用短連接的方式解決。鑒於每隔500MS就要上傳一次數據的頻率,短連接其實不適合用,因為短連接每次都要建立和斷開SOCKET連接,
而建立和斷開SOCKET連接是特別耗時的,所以使用TCP長連接的方式。
有人說為什麼想著阻塞的方式,答案是:因為阻塞的編程是最簡單的。