Wiki:Delphi第三方TCP / IP组件库的当前最新技术

时间:2011-04-18 21:26:51

标签: delphi tcp wiki delphi-2007 delphi-xe

我已经做了大约18个月的裸机TCP / IP,所以我想知道目前的技术水平是什么。

我正在寻找正面和负面两个方面,开发服务器和客户端软件 我将做一个需要坚如磐石的TCP / IP层的项目,所以对我来说这是一个重要的方面:)

为了成为一个社区维基,我正在寻找更广泛的答案而不仅仅是'坚如磐石'。因此,例如有关特征宽度的信息也很受欢迎。

我将使用答案中的相关方面更新问题,以获得对这些库有均衡概述的wiki条目。

例如,请参阅下面的回答以及我过去与Indy的经历 我对Indy的异常处理和反冻结感到矛盾,虽然我已经习惯了它,但它仍然感觉有点不自然。

现在我用Delphi 2007(非Unicode)和XE(Unicode)开发,所以我考虑的库应该至少支持这两个Delphi版本。

7 个答案:

答案 0 :(得分:9)

修改:我过去与Indy的经历总结和评论(感谢EugeneMarjan) (请使用当前的Indy最新技术进行更新):

临:

  • 附带Delphi
  • 成熟
  • 开发社区
  • 开源让很多眼睛仔细检查这些来源
  • 源代码中的大量有价值的评论文档
  • OpenSSL支持
  • 支持广泛的Delphi版本(包括2007和XE)
  • 广泛的协议选择

缺点:

  • Delphi的版本并不总是最稳定的版本;从源代码下载通常需要获得稳定的构建
  • (同时)大量重复的代码现在在Delphi中(但是Indy需要与旧的Delphi版本兼容)
  • 并非所有TCP / IP组件都是最新的(例如,当时POP3客户端组件不支持某些基本的POP3命令)
  • 版本互操作性很痛苦:从一个Indy版本升级到另一个版本可能非常耗时
  • 我对Indy的异常处理和反冻结感到矛盾,虽然我已经习惯了它,但仍感觉有点不自然。
  • 在构建更新之间进行了重大更改; ifdefs需要容纳那些
  • 不清楚发布状态(如果有的话),很长一段时间没有RC,获取主干可以使你的本地副本不稳定

答案 1 :(得分:5)

ICS - Internet组件套件

ICS - see www.overbyte.be。由FrançoisPiette开源。对我而言,这一直是Indy的第一选择。这是最有趣的卖点:它使得使用异步东西变得容易,而异步似乎更接近于“裸机”套接字编程。

我用它来构建一个相当复杂的VNC代理,代理本身(服务器)是用ICS构建的,客户端是Indy和ICS的混合体。在需求高的时期,代理处理大约100个同时连接和大约10个同时的VNC屏幕会话。它平均消耗5 mbit / s,通过两个不同的Internet连接处理连接。我不认为100 + 10是限制,因为服务器处理没有任何问题,CPU使用率太低,无法提及。

优点:

  • 异步工作
  • 初学者更容易,因为它不需要线程
  • 支持大量协议

缺点:

  • 依赖于Windows消息传递。我对此感到很不舒服。
  • 异步行为使得实现大多数协议变得稍微困难​​(因为大多数协议都采用发送命令 / 接收响应的形式)。这对大多数人来说无关紧要,因为ICS为最常用的协议提供了现成的实现。

所有这一切,我在很长一段时间内没有使用过ICS,我没有及时了解所有的花里胡哨。这是CW,所以请编辑和扩展!

答案 2 :(得分:2)

我从2003年开始使用Indy作为我自己的TCP通信框架。它是坚如磐石的,我有一个与Delphi 2007一起使用的版本和另一个与Delphi 2010一起使用的版本,如果你正确地处理了threadng,就不需要使用防冻东西了,我在客户端和服务器上有一致的异常处理通过实现我自己的包装器。

您可以在此处下载(http://www.csinnovations.com/framework_delphi.htm) - 查找 Tcp 单元,主要是AppTcpServerUnt和AppTcpClientUnt。

答案 3 :(得分:2)

我强烈推荐Clever Internet Suite,它是迄今为止设计和编写的最佳通信组件集。它不是免费的,所以不是众所周知的,但它值得调查。

临:

  • 精心设计和撰写
  • 包含许多components并实现各种协议。
  • 支持广泛的Delphi版本(包括2007和XE)
  • SSL支持
  • 成熟产品,release history表示

缺点:

  • 不是开源

答案 4 :(得分:2)

答案实际上取决于许多因素和您的要求,例如

  1. 需要哪些层(TCP,SSL / TLS,应用程序级协议)
  2. 您是否还需要客户端或服务器(服务器任务要复杂得多)
  3. 您是否计算付费期权。
  4. 总的来说,由于大多数开发人员将.NET视为主要开发平台,因此在18个月甚至3年内发生的事件并不多(积极)。

    其他答案中提及的{p> Clever Internet SuiteDevArt's SecureBridge获得了一些新功能。

    我们的SecureBlackbox支持最高级的功能(除了原生SSL / TLS):IPv6,HTTPS代理,基本,摘要和NTLM身份验证(从SecureBlackbox 9开始),国际域名(从SecureBlackbox 9开始) ),DNSSEC,带宽控制等。

    SecureBlackbox支持的应用程序级协议是HTTP(客户端和服务器),WebDAV(客户端和服务器),FTP(客户端和服务器),SSH和SFTP(客户端和服务器),SMTP和POP3客户端,DNS客户端,AS2和AS3。所有协议(当然除了SSH和SFTP之外)都完全支持SSL / TLS。

    支持的协议列表可在Packages页面上找到。每个软件包的“技术规范”页面上列出了支持的协议功能。

答案 5 :(得分:2)

您可以考虑使用更高的协议级别,例如HTTP,因为:

  • 它更适合防火墙和VPN;
  • 这是一个很好的文档,被称为一个很好的协议;
  • 它已经保护了HTTPS版本;
  • 它在行TCP / IP上的开销非常低;
  • 它已准备好在AJAX环境中使用(如果将来需要它);
  • Microsoft已在现代版Windows中为您进行了低级调整。

在这种情况下,您可以查看从{4}到Delphi 6到XE的工作:

THttpApiServer使用快速http.sys内核模式服务器实现HTTP服务器:

  • HTTP Server API使应用程序无需通过HTTP进行通信 使用Microsoft Internet Information Server(IIS)。申请可以注册 接收特定URL的HTTP请求,接收HTTP请求和发送 HTTP响应。 HTTP Server API包括SSL支持,以便应用程序 无需IIS即可通过安全HTTP连接交换数据。也是 旨在与I / O完成端口一起使用。
  • Windows Server 2003操作系统支持HTTP Server API 在Windows XP Service Pack 2(SP2)上。请注意Microsoft IIS 5 在带有SP2的Windows XP上运行无法与其他HTTP共享端口80 应用程序同时运行。

TWinHTTP使用WinHTTP API处理客户端HTTP / 1.1请求:

  • Microsoft Windows HTTP服务(WinHTTP)针对的是中间层和  需要访问HTTP客户端堆栈的后端服务器应用程序;
  • 比旧的WinINet API快得多。

结果速度非常好(尤其是服务器),您将依赖Microsoft实施。第一个是IIS的核心,第二个是在最新版本的Internet Explorer中使用。

答案 6 :(得分:1)

使用NetMaster组件方式(方式!)返回旧的Delphi版本(2!3!4!)

是否有人与Indy合作过,但也有不自然的感觉(实际上我会把它描述得更笨重)

当我在Windows网络API周围搜索一个轻薄的包装时偶然发现Synapse

然后重新发现普通的旧TTcpClient / TTcpServer。他们是Delphi自己的winsock包装器!我使用它们阻塞,为每个TTcpClient使用专用的TThread继承,让TTcpServer执行线程并在DoAccept中完成所有工作,请参阅here作为示例。

现在,这让我感受到了我们正在寻找的坚如磐石的感觉。如果你想支持繁重的负载,我会尝试构建一个线程管理器来处理每个线程的几个套接字/连接,或者有两组线程:一些用于监听大量“休眠”连接,另一些用于处理较小的“活动”连接,根据处理请求或响应的情况切换线程之间的连接。 (例如HTTP的Connection: keep-alive