印地或 ICS 或 ?
Posted
技术标签:
【中文标题】印地或 ICS 或 ?【英文标题】:Indy or ICS or ? 【发布时间】:2011-02-09 10:43:47 【问题描述】:谁能告诉我哪个更稳定?我知道每个人都有自己的优点和缺点。但是哪个更适合http等呢?
在我之前的应用程序中,我使用了 indy9,但我对它并不满意,因为我有时会遇到奇怪的错误。
谁能推荐一个?
【问题讨论】:
【参考方案1】:我在很多项目中都使用 Indy。我主要使用 9 和 10 作为 HTTP 服务器和代理。这些项目有时会获得非常繁忙的流量(HTTP)。印地从未让我失望。它工作非常稳定。
但我也遇到了一些“奇怪”的情况,我必须深入挖掘才能找到根本问题。我也不喜欢 Indy 倾向于通过异常处理很多事情的方式。一般来说,我更喜欢 ICS 编码风格。但是让我去 ICS。
ICS 使用非阻塞套接字,而 indy 使用阻塞。虽然非阻塞是可以的,而且乍一看似乎更好,但我发现它在很多情况下都很烦人。问题是由于回调函数,代码的自然流程会丢失。这使得编写程序类型的库变得更加困难。此外,我不喜欢通过消息处理所有事情的方式。对我来说,当与多线程混合时,它会很快变得混乱。如今,多线程已成为主流。
因此,虽然我喜欢 ICS 中的编码风格和代码质量,但我更喜欢 Indy 的简单使用和阻塞模式。你更喜欢什么取决于你,但两个库都是成熟和稳定的。
这是我的两分钱。
【讨论】:
虽然我也喜欢 Indy,但我认为 ICS 的示例更出色。特别是 Indy10 完全同意。 Indy10 的例子很差。 @Runner 看看 SO,与 Indy 问题相关的问题比 ICS 还要多。你来评判什么更稳定。 它们都很稳定。如果您阅读我的答案,您会发现我喜欢 ICS 代码质量比 Indy 好得多。但是 ICS 在代码友好和用户友好的部门失败了。而且在多线程环境中使用起来要困难得多【参考方案2】:我也同时使用 Indy 和 ICS。
大多数时候我更喜欢 Indy,因为用它实现顺序类型的协议非常容易(请求在它自己的线程中运行,因此您只需读取/写入连接,真的很容易)。使用 Indy 需要扎实的线程和同步知识。与 Runner 不同,我喜欢 Indy 如何使用 Exceptions 来处理“异常”的东西,因为它让我可以专注于协议的正常流程(我使用 try-finally 块来确保我释放资源)。
我还在 Indy 失败的应用程序中使用了 ICS:我将它用于实现 TCP/IP 代理的应用程序。使用 ICS 更简单,因为它具有非阻塞性质。我能够“代理”我一无所知的 TCP/IP 协议,所以我不知道字节如何从一端流到另一端。 Indy 在这种情况下失败了,因为在 Indy 中你是在阅读或写作,你不能同时做这两件事。使用 ICS 实现顺序类型的协议有点痛苦:您本质上需要使用状态机逻辑,对协议进行少量制动,保持标志位,以便您知道您在协议中的位置。一大优势:ICS 的作者 François Piette 在许多论坛和邮件列表中都很活跃并且非常乐于助人,并且在任何与 ICS 相关的事情上都非常迅速地提供帮助。
对我来说,如果我需要用 TCP/IP 做某事,决策路径很简单:可以用 Indy 做吗?然后是印地。如果 Indy 做不到,那就用 ICS 来做!
【讨论】:
【参考方案3】:我已经将 Indy 9 和 10 用于 TCP、HTTP 和 FTP,几乎没有问题。 ICS 也是一个不错的选择。它是非阻塞的,这将改变你的使用方式。
我没用过,不过听说Synapse的好东西,也是屏蔽的。
【讨论】:
【参考方案4】:我们测试了 Indy10 IdTCPClient 从远程服务器接收视频流,没问题。但是当它在接收流时,同时使用它向服务器发送一些数据,几分钟后,接收到的流数据开始丢失数据字节。我们使用嗅探工具跟踪这个问题,确认IdTCPClient在接收流中丢失了一些字节。
所以,我们测试了 Indy9.018,同样的问题发生了但几次 VS。印地 10.
【讨论】:
【参考方案5】:请记住,Indy 始终处于测试阶段。有时您需要使用夜间构建。
【讨论】:
【参考方案6】:哪个更好真的取决于具体的用例,但我对 indy 作为 http 客户端不满意,而 ICS 最终正是我需要的,随机的怪癖少了很多。
请注意,虽然它是非阻塞的,所以它不仅仅是替代品。
【讨论】:
【参考方案7】:我使用 Indy 9 为超过 100 万用户提供稳定的、已发布的生产代码,并且从未收到任何奇怪的错误。
【讨论】:
【参考方案8】:我会说答案取决于您想用互联网做什么。如果您准备好参与了解它的工作原理,Indy 就很好,并且非常有能力。 ICS 是一个不同的东西,我已经有效地将它用于多连接系统。但是对于日常“获取文件或发送电子邮件”类型的东西,你想做一个基本的任务,我几乎总是使用Clever Components Internet Suite,因为你只是创建组件, 设置选项,它的工作原理。该套件非常全面,并获得了有用的更新。
【讨论】:
以上是关于印地或 ICS 或 ?的主要内容,如果未能解决你的问题,请参考以下文章
Android:将英文数字字符串显示为印地语或任何语言数字字符串
以 min API 14 (ICS) 为目标时,最好使用 FragmentActivity(或 ActionBarActivity)或系统 Activity?
使用 AsyncTask 的 Android ICS 和 MJPEG