2010-01-10 115 views
4

我正在开发一个相当复杂的应用程序,同时具有win32和web访问权限。服务器端的实现是自定义的,它将在我们公司托管。 HTTP服务器可以作为一个独立的Indy(或另一个)HTTP服务器实现,或者更传统地用Apache/IIS实现。独立的Web服务器与Apache/IIS

我想知道什么是独立的HTTP服务器VS阿帕奇/ IIS的优势/劣势,在安全或其他任何你认为相关的条款。

回答

5

我会说这取决于你的需求和期望。如果你正在编写一个自定义的纯HTTP服务器,甚至可能是ISAPI支持等,或者你正在编写高度专用化的http服务器/代理服务器等等,这只会缩小专门化的任务。例如,我有这样的专用代理和一个专门的ISAPI模块处理框架。我想说的好处不多。所以优点是:

  1. 易于部署。尝试将Apache应用程序部署到每台机器上
  2. 更好的性能,更小的内存占用。尝试在低端笔记本电脑上使用apache
  3. 更好的安全性。因为你只做狭义任务,所以违规的可能性要小得多。阿帕奇是这样做的,所以违规的可能性要高得多。
  4. 完全控制此类服务器的运作并控制代码。如果您需要稍微不同的行为或新功能,那就明白了。
  5. 如果您像我一样运行ISAPI模块,则可以将它们分别存储在不同的进程中并实现更好的稳定性。如果一个模块/请求崩溃,其他模块不会受到伤害。

的缺点:

  1. 写另一个HTTP服务器
  2. 学习从零
  3. 一路走高数量的缺陷和错误的几率要高的协议和内部运作,因为代码是没有的战斗硬化。这需要时间来解决。
  4. 因为你的焦点很狭窄,所以你不像Apache那么多才多艺。不一定像前面所述的那样坏。

我的判决就是这样。如果您只需要一个普通的http服务器来提供某些内容,并且您将在内部托管该服务器,在一台或几台服务器上,请转至Apache。如果你正在制作一个专门的http处理代码片段,那将会安装很多,你需要控制,然后开发你自己的。相信我这是值得的。我现在很高兴,当我们决定同样的事情时,我坚持了这一点。现在我有很多笔记本电脑安装这个软件非常复杂,我无法想象必须在每台笔记本电脑上安装Apache。然后将其配置为按需使用。

Indy(具有所有的麻烦和怪癖)已经被证明是一个非常稳定的开箱即用的web服务器。 ICS在这里可能是一样的,但我还没有使用它,所以我不能说。设置Indy HTTP服务器是非常容易的。

只是我的两分钱;)

3

IIS和Apache是​​很好理解的HTTP服务器。

拥有自己的HTTP服务器的唯一好处是简化这可能不会是一个优势假设你的应用程序的服务器端部分是要在公司内专门举办部署。

另一优点是性能,可以实现更高的吞吐量和更快的响应时间与定制的HTTP服务器。但除了易于部署和性能外,我看不到其他任何优势。

有很多缺点,虽然

  • 你写的是已经被写入
  • 你将需要证明和解释新的开发者为什么IIS和Apache不适合代码
  • 你会需要记录和训练他人如何使用这样的http服务器。例如新开发人员需要知道如何在IIS/Apache上设置SSL证书或GZIP压缩,但是他们必须向您学习如何在您的http服务器上执行此操作,以及是否支持所有功能
  • 如果这是您的第一个http服务器需要编写,您需要花费大量时间学习和研究您的应用程序的主要业务领域之外的各种标准和约定。
4

通过“独立的Web服务器”你是嵌入在你的应用程序?我从来没有使用Indy,但我曾使用Jetty库来处理好几个Java应用程序。由于Web服务紧密集成到应用程序中,而不需要额外安装,所以这比通过应用程序服务器的Apache/IIS代理的主要优点是易于部署和配置。

如果你有现有的应用程序,而且这个新的应用程序被允许部署到相同的环境,我敢肯定你的系统管理员会希望你使用现有的应用程序服务器。没有人喜欢额外的操作复杂性,即使它稍微容易建立。将另一个应用程序添加到应用程序服务器很简单。

其他注意事项有:

安全:网络配置,日志文件,访问控制等,都将有与Apache/IIS系统不同的实现和不同通常意味着更糟糕的安全性。简单的事情,如您的系统管理员使用Apache/IIS理解的SSL身份验证将与嵌入式Web服务器的工作方式不同。

性能:嵌入式服务器可能效率稍高一点,但可扩展性稍差。你的编码决定会对此产生很大的影响,并且嵌入式服务器很容易把它搞砸。开发:我发现嵌入式服务器更容易处理,因为我可以将它们作为简单的Java应用程序而不是Web应用程序来运行,例如,使用Tomcat集成的Eclipse Java视图,而不是J2EE视图。

我知道这是Java观点的答案,但我希望一般的想法适用于Delphi。

+0

他们这样做。概念是相同的,只是潜在的技术是不同的。并且你添加了一些我错过的点:) – Runner 2010-01-10 19:44:10

1

我一般都是独立开发,所以我得到了更好的调试体验,然后部署为ISAPI dll。

1

我有好几次想知道这件事。

我也一直在努力一些IInternetProtocol实现,以允许Internet Explorer与替代URL方案的工作。

所以我前一段时间开始的一个开源项目:http://xxm.sourceforge.net/

它可以让您的ISAPI扩展,独立服务器之间的自由切换,也许更晚。 (Apache模块和Firefox协议处理程序正在制作中。)

Delphi代码和HTML与其他Web脚本语言非常相似,但使用(快速)Delphi编译器构建用于运行网站的库。

0

我总是把焦点放在ISAPI和使用IDDebugger用于调试这个过程。这为您提供了两全其美的解决方案,您可以针对最终部署的相同版本进行调试。不幸的是,我不开发Apache,所以不能说它的易于开发。

由于我使用这种方法,我不必担心独立版和ISAPI版本之间的更改没有被同步,并且可以轻松地将客户版本放入我的测试环境中以复制任何特定行为,然后针对该行为进行测试一个修复程序,并确保它在部署在现场时能够正常工作。

有太多的事情要操心,甚至考虑使用互联网面临的一个独立的Web服务器。将这种担心(以及多年的经验)放到IIS/Apache的手中要好得多。

1

我写了几个实现Indy HTTP Stack并提供Web服务的应用程序。这可能既简单又复杂。当你开始使用线程时需要注意Indy是如何为HTTP请求创建线程的,因此复杂性就来了。因此,将它与服务器代码集成可能需要一些思考,特别是如果服务器连接到某个数据源或某种类型的通用控件。

此外,您还需要管理所有安全性,访问文件,而几乎所有其他常规的Web服务器会自己做。因为Indy的例子有限,所以这里可能会出现问题。

话虽如此,我已经找到了印10 HTTP服务器是强大的,而且运作非常好,如果你的目标的具体要求,如基于一些您的应用程序正在做只是服务了XML。你可以完全控制服务器在做什么,你可以选择不同的部署模式 - Windows服务,独立应用等...

如果你有一个设计良好的线程安全的应用程序,然后在顶部实现HTTP它可以像将Indy HTTP Server组件拖放到窗体或单元上一样简单。不需要为网络内容重复任何代码。