Delphi服务器套接字组件

Delphi服务器套接字组件,delphi,sockets,Delphi,Sockets,我们有一个完全用Delphi编写的C/S应用程序(客户机和服务器或中间件,如果您需要) 对于客户部分,我们使用Indy。 对于服务器,我们使用DXSock 由于DXSock已经死了一段时间,我们正在研究服务器部分的替代方案 我想听听关于Delphi的最佳服务器套接字替代组件的一些评论。 当前系统通常有几十个永久连接,每个连接在自己的线程上工作,但将来可能会非常困难(如果可能,这应该改进为线程池)我使用Indy组件进行商业服务器端工作,组件集非常稳定(9或10)。我的服务器每天有数百万个连接,没有

我们有一个完全用Delphi编写的C/S应用程序(客户机和服务器或中间件,如果您需要) 对于客户部分,我们使用Indy。 对于服务器,我们使用DXSock

由于DXSock已经死了一段时间,我们正在研究服务器部分的替代方案

我想听听关于Delphi的最佳服务器套接字替代组件的一些评论。
当前系统通常有几十个永久连接,每个连接在自己的线程上工作,但将来可能会非常困难(如果可能,这应该改进为线程池)

我使用Indy组件进行商业服务器端工作,组件集非常稳定(9或10)。我的服务器每天有数百万个连接,没有任何问题

很多月前我用过DXSock。他总是在优化,但似乎从未完成。他似乎有另一个版本


如果您想要商业支持,那么我建议您使用nSoftware的IPWorks。

如果您想要获得尽可能好的性能,您必须在非阻塞模式下使用套接字,或者使用。IPWorks也是这样实现的。据我所知,印地或不实施这些措施(至少是正式实施)

我们在我们的开源单元中使用了完成端口和线程池,在我们的应用程序中使用

下面是这个解决方案的一些基准测试,从Delphi6到DelphiXE。我不认为这是“最好的组件”,但它是一个有效且快速的组件(每个请求大约有4KB的JSON数据):

  • Http客户端保持活动状态(即在请求期间一个Http/1.1客户端连接保持活动状态): 先用7.87毫秒,后用153.37毫秒,即6520/s,平均153us
  • Http客户端多连接(即,为每个请求创建一个新的Http/1.0客户端连接-此连接使用完成端口和线程池): 第一个在151us中,在305.98ms中完成,即3268/s,平均305us
为了进行速度比较,以下是我们框架中可用的其他通信协议:

  • 命名管道访问: 78.67毫秒中的第一个,在187.15毫秒中完成,即5343/s,平均187us
  • 本地窗口消息: 在148us中第一次,在112.90ms中完成,即8857/s,平均112us
  • 直接进程内访问: 在44us中排名第一,在41.69ms中完成,即23981/s,平均41us
我们在TCP/IP上使用HTTP/1.1协议,因为普通TCP/IP上的开销非常小,这是一个处理良好的防火墙协议,允许AJAX应用程序使用我们的框架,而它的主要目的是为Delphi客户机服务

我想没有“Delphi的最佳服务器套接字替代组件”,这取决于服务器应用程序的用途。主要的瓶颈将在Windows内核本身。也许直接访问Windows的应用程序会有所帮助


考虑使用专用的优化服务器而不是Delphi服务器,比如在Linux下使用FastCGI通过免费的Pascal(或CrossKylix)应用程序处理请求。我想这将是可能的最佳性能。

Indy将工作100秒,可能1000秒的并发连接,这取决于连接的活跃程度,特别是在多核机器上。只有当你需要更多的并发连接时,我才会考虑其他选择。我真的希望有更多的选择。我接受这个答案,因为我指向iocp。非常感谢你!我已经为我们的http/1.1服务器添加了http.sys支持。这是HTTP服务器的非常快速的内核级支持。看见