2013-05-10 142 views
2

有數千個客戶端參與的客戶端 - 服務器(TCP)應用程序的最佳組件,而所有連接必須保持活動狀態?
到目前爲止,我已使用Indy在服務器應用程序中有一個TIdTCPServer,在所有客戶端應用程序中都有一個TIdTCPClient。我希望客戶端和服務器隨時隨地發送數據。
這是一個好方法嗎?具有數千個客戶端的客戶端 - 服務器的最佳組件

+1

東西['related'](http://stackoverflow.com/q/15924616/960757)。 – TLama 2013-05-10 09:42:00

+1

另請參見[可擴展的Delphi TCP服務器實現](http://stackoverflow.com/questions/7150093/scalable-delphi-tcp-server-implementation) – mjn 2013-05-10 10:15:27

+1

請參閱[本博客條目有關DataSnap併發訪問](http:// robertocschneiders .wordpress.com/2012/11/22 /基於datasnap-analysis-on-speed-stability-tests /) - 聽起來的確如果Indy的擴展性不好。使用第1000個客戶端時,請參考IOCP /事件驅動的服務器,如http://www.realthinclient.com/或我們的開源http://mormot.net – 2013-05-10 11:53:15

回答

3

它可能工作,但它可能最終會帶來很多問題,這取決於什麼樣的數據,負載,安全性等。我最終使用了一個Web服務器(Tomcat + Comet)。這項工作已經完成:套接字穩定性,框架,安全性,跨多個實例的負載分擔等... 成千上萬的客戶端並不那麼容易處理......然後您可以專注於您的應用程序,並且只關注它。

+1

+1,Java(Netty,Servlets)在http://www.techempower.com/blog/2013/04/05/frameworks-round-2/ – mjn 2013-05-10 10:19:12

+1

排名第一.AFAIK Indy沒有實現IOCP,所以會創建每個客戶端連接一個線程。所以它將無法處理數千個客戶端,而不會觸發Out Of Memory錯誤。這裏需要IOCP/EventDriven服務器,而Indy不具備這種架構。 @mjn Java服務器超出了範圍,在這個問題的背景下,我很害怕。只需比較「hello world」JSON請求背後的內存消耗。 :) – 2013-05-10 12:45:43

+1

@ArnaudBouchez:客戶端將只消耗1個線程...因爲它是客戶端;)。在服務器端,我不會使用indy也不使用Delphi來構建服務器(爲什麼我會重建輪子?)。 – 2013-05-10 12:52:51