2013-05-10 106 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