印第(Indy)还是ICS?

15

有人能告诉我哪个更稳定吗?我知道每个选项都有优劣之分,但哪一个对于http等方面更好呢?

在我的上一个应用程序中,我使用了indy9,但我对它不满意,因为我有时会遇到奇怪的错误。

有人可以推荐一个吗?

9个回答

16

我在很多项目中都使用了Indy,主要是作为HTTP服务器和代理,使用过9和10版本。有时候这些项目会有非常密集的流量,在这种情况下Indy从未让我失望过,非常稳定。

但是我也遇到了一些“奇怪”的情况,不得不深入挖掘来找到潜在的问题。我也不喜欢Indy处理许多事情时经常通过异常处理方式来解决。总体而言,我更喜欢ICS的编码风格,让我们接着谈ICS。

ICS使用非阻塞套接字,而Indy使用阻塞式的。虽然非阻塞看起来好像更好,但在很多情况下我觉得它很烦人。问题在于回调函数会导致代码的自然流程丢失,这使得编写面向过程类型的库更加困难。此外,我不喜欢一切都通过消息来处理。对我来说,当与多线程混合使用时,它很快变得凌乱。而多线程现在已成为主流。

因此,虽然我喜欢ICS的编码风格和代码质量,但我更喜欢Indy的使用简单性和阻塞模式。你更喜欢哪个取决于你,但这两个库都很成熟和稳定。

这是我的两分钱意见。


虽然我也喜欢Indy,但我认为ICS的示例更优秀。特别是Indy10。 - Marco van de Voort
完全同意。Indy10 在示例方面非常不足。 - Runner
@Runner,只需看看SO上有多少Indy问题相关的问题,比ICS还要多。你可以判断哪个更稳定。 - Santos Oliveira
它们都很稳定。如果你读了我的回答,你会发现我更喜欢ICS的代码质量,而不是Indy。但是ICS在代码友好和用户友好方面表现不佳。此外,在多线程环境中使用它要困难得多。 - Runner

7
我同时使用Indy和ICS。大部分情况下,我更喜欢使用Indy,因为它很容易实现顺序类型的协议(请求运行在自己的线程中,所以你只需读取/写入连接即可,非常容易)。使用Indy需要扎实的线程和同步知识。与Runner不同,我喜欢Indy如何使用异常处理“异常”内容,因为它允许我集中精力处理协议的正常流程(我使用try-finally块来确保我释放资源)。
我还在一个应用程序中使用ICS,而Indy则失败了:我将其用于实现TCP/IP代理的应用程序。由于ICS的非阻塞性质,使用ICS更简单。我能够“代理”我不知道任何关于TCP/IP协议的字节如何从一端流向另一端的TCP/IP协议。Indy在这种情况下失败了,因为在Indy中,你要么读取要么写入,不能同时进行两个操作。使用ICS实现顺序类型协议有点麻烦:你需要使用状态机逻辑,将协议分解成小块,保留标志以便知道协议的进展。一个大的优点是:ICS的作者François Piette在许多论坛和邮件列表上非常活跃且乐于助人,对ICS相关的任何事情都非常及时。
对我来说,如果我需要处理TCP/IP,决策路径非常简单:能用Indy做吗?那就是Indy。如果不能使用Indy,则使用ICS!

6

我曾经使用过Indy 9和10来进行TCP、HTTP和FTP的操作,遇到的问题非常少。ICS也是一个不错的选择,它是非阻塞的,这将改变你使用它的方式。

我没有用过它,但我听说Synapse也很不错,它是阻塞的。


5
我们测试了Indy10的IdTCPClient,从远程服务器接收视频流,一切正常。但是当它在接收流的同时向服务器发送一些数据时,经过一段时间后,接收到的流数据开始丢失一些字节。我们使用嗅探工具跟踪此问题,确认IdTCPClient在接收流时丢失了一些字节。
因此,我们测试了Indy9.018,同样的问题发生了,但比Indy10少一些次数。

4

请记住,Indy始终处于测试阶段。有时您需要使用夜间版本。


2

哪个更好,实际上取决于具体的使用情况,但我对indy作为http客户端不满意,ICS最终成为了我需要的东西,而且没有那么多随机问题。

需要注意的是,它是非阻塞的,所以它不仅仅是一个替代品。


2

我使用Indy 9来为超过一百万用户提供稳定的、发布的、生产级别的代码,并从未收到任何奇怪的错误。


2
我认为答案取决于您想如何使用互联网。如果您准备了解它的工作原理并且具有相关知识,Indy是非常好的选择,并且功能强大。ICS则提供了不同的方案,我已经成功地在许多连接系统中使用过它。但是对于日常的“下载文件或发送电子邮件”等基本任务,我几乎总是使用Clever Components Internet Suite,因为您只需要创建组件、设置选项,然后它就可以工作了。该套件功能非常全面,并且会定期更新。

0

我知道这是一个旧帖子,但如果2023年以后的人发现:

  1. Indy不再有官方稳定更新,只有测试版。

  2. ICS支持TLS 1.3(https),并且在组件压缩包中包含易于找到的兼容SSL DLL文件。还可以用于特定用例,比如:

    • JOSE签名,
    • 证书过期检查,
    • 证书生成和转换等。

我们不得不放弃Indy10,因为最新的政府项目有特定的证书要求。ICS非常稳定可靠。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接