gpt4 book ai didi

Delphi服务器套接字组件

转载 作者:行者123 更新时间:2023-12-03 15:27:56 26 4
gpt4 key购买 nike

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

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

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

最佳答案

如果您想获得最佳性能,则必须在非阻塞模式下使用套接字,或者使用 completion ports 。 IPWorks就是这样实现的,以及iocp 。据我所知,Indy 或 Synapse不要实现它们(至少正式地)。

我们在开源 SynCrtSock 中使用了完成端口和线程池单位,用于我们的 Synopse SQLite3 framework .

以下是该解决方案的一些基准测试,适用于 Delphi 6 到 Delphi XE。我不认为这是“最好的组件”,但它是一个有效且快速的组件(每个请求约为 4 KB 的 JSON 数据):

  • Http 客户端保持事件状态(即一个 HTTP/1.1 客户端连接在请求期间保持事件状态): 首先在 7.87ms 内完成,在 153.37ms 内完成,即 6520/s,平均 153us
  • Http 客户端多连接(即为每个请求创建一个新的 HTTP/1.0 客户端连接 - 该连接使用完成端口和线程池): 首先在 151us 内完成,在 305.98ms 内完成,即 3268/s,平均 305us

为了进行速度比较,以下是我们框架中可用的其他通信协议(protocol):

  • 命名管道访问: 首先在 78.67ms 内完成,在 187.15ms 内完成,即 5343/s,平均 187us
  • 本地窗口消息: 首先在 148us 内完成,在 112.90ms 内完成,即 8857/s,平均 112us
  • 直接进程内访问: 第一个用时 44us,用时 41.69ms 完成,即 23981/s,平均 41us

我们在 TCP/IP 上使用 HTTP/1.1 协议(protocol),因为与普通 TCP/IP 相比,开销非常小,而且对于防火墙等来说,这是一个处理良好的协议(protocol),并且允许 AJAX 应用程序使用我们的框架,而其主要目的是为 Delphi 客户提供服务。

恕我直言,没有“Delphi 的最佳服务器套接字替代组件”,这取决于您的服务器应用程序的目的。主要瓶颈在于 Windows 内核本身。也许直接访问HTTP Kernel-Mode Driver (Http.sys) Windows 可以提供帮助。

考虑使用专用的优化服务器而不是 Delphi 服务器,例如 lighttpdCherokee在 Linux 下使用 FastCGI 通过 Free Pascal(或 CrossKylix)应用程序处理请求。我想这将是最好的表现。

关于Delphi服务器套接字组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4455687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com