Delphi 服务器套接字组件

qlckcl4x  于 2022-11-04  发布在  其他
关注(0)|答案(3)|浏览(168)

我们有一个C/S应用程序,全部用 Delphi 编写(客户端和服务器--或者中间件,如果你愿意的话)。对于客户端部分,我们使用Indy。对于服务器,我们使用DXSock。
由于DXSock已经死了一段时间,我们正在调查服务器部分的替代品。
我想听听关于 Delphi 最好的服务器套接字替代组件的一些评论。目前的系统通常有几十个永久连接,每个连接都在自己的线程上工作,但将来可能会有几百个(如果可能的话,应该改进为线程池)

ijxebb2r

ijxebb2r1#

如果你想拥有最好的性能,你必须在非阻塞模式下使用套接字,或者使用completion ports。IPWorks是这样实现的,iocp也是这样。据我所知,Indy或Synapse没有实现它们(至少官方是这样)。
我们在开源SynCrtSock单元中使用了完成端口和线程池,该单元在我们的Synopse SQLite3 framework中使用。
下面是这个解决方案的一些基准测试,从 Delphi 6到Delphi XE都可以使用。我不认为这是“最好的组件”,但它是一个有效且快速的组件(每个请求大约是4KB的JSON数据):

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

为了比较速度,我们的框架中提供了以下其他通信协议:

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

我们在TCP/IP上使用HTTP/1.1协议,因为在普通的TCP/IP上开销很小,这是一个很好的防火墙协议,允许 AJAX 应用程序使用我们的框架,而它的主要目的是服务于 Delphi 客户端。
恕我直言,没有“ Delphi 的最佳服务器套接字替代组件”,这取决于你的服务器应用程序的目的是什么。主要的瓶颈将在Windows内核本身。也许直接访问Windows的HTTP Kernel-Mode Driver (Http.sys)可能会有所帮助。
考虑使用一个专用的优化服务器而不是 Delphi 服务器,比如lighttpdCherokee,在Linux下使用FastCGI通过Free Pascal(或CrossKylix)应用程序处理请求。我想这将是最好的性能。

js5cn81o

js5cn81o2#

我使用Indy组件进行商业服务器端的工作,组件集非常稳定(9或10个)。我的服务器每天有数百万个连接,没有任何问题。
我用DXSock很多个月前。他总是优化,但似乎从来没有完成它。他似乎有另一个版本了。
如果你想要商业支持,那么我推荐nSoftware的IPWorks。

yyhrrdl8

yyhrrdl83#

事实上DXSock并没有死,v6.1才刚刚发布。我们在田纳西州使用的网络托管公司失去了域名-所以只有每年更新订阅的客户才能收到DXSock 5.0,6.0和6.1。
Indy无法在32位Windows上支持超过2,000个并发连接-因为Chad和工作人员使用TThread,它实现了每个线程/套接字连接实际上的1 MB-2000 x1MB =〉2.5GB的RAM,而32位操作系统不支持。DXSock实现了每个连接0 b的模型(除非您另有定义),并且可以在Windows、Linux、Mac、Pi等平台上处理50,000多个并发任务。
Ozz尼克松-ozznixon@bpdx.com如果您想了解6.1的更多详细信息
DXSock的作者
《Winshoes》的合著者,后来成为了INDY。

相关问题