代码之家  ›  专栏  ›  技术社区  ›  Daniel Maurić

独立Web服务器与Apache/IIS

  •  4
  • Daniel Maurić  · 技术社区  · 16 年前

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

    我想知道独立HTTP服务器与Apache/IIS在安全性或您认为相关的其他方面的优缺点。

    7 回复  |  直到 16 年前
        1
  •  5
  •   Mohammed Nasman    16 年前

    我想说这取决于你的需要和期望。如果您编写的是一个自定义纯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在这里可能是一样的,但是我还没有用它来做这个,所以我不能说。设置IndyHTTP服务器非常简单。

    只有我的两分钱;)

        2
  •  4
  •   Ken Fox    16 年前

    “独立的Web服务器”是指嵌入到应用程序中吗?我从来没有使用过Indy,但是我已经使用了一些Java应用程序。 Jetty 图书馆。与应用服务器的Apache/IIS代理相比,这一点的主要优势在于更容易部署和配置,因为Web服务与应用程序紧密集成,无需额外安装。

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

    其他考虑因素包括:

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

    性能:嵌入式服务器可能效率更高,但可扩展性更低。您的编码决策会极大地影响这一点,而且对于嵌入式服务器,很容易将其搞砸。

    开发:我发现嵌入式服务器更容易工作,因为我可以用简单的Java应用程序代替Web应用程序来运行它们,例如Eclipse Java视图,而不是带有Tomcat集成的J2EE视图。

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

        3
  •  3
  •   lubos hasko    16 年前

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

    拥有自己的HTTP服务器的唯一优势是简化部署,如果应用程序的服务器端部分将以独占方式托管在您的公司中,那么这可能不是一个优势。

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

    但是也有很多缺点

    • 您正在编写已经编写的代码
    • 您需要证明并解释新开发人员为什么IIS和Apache不适合
    • 您需要记录和培训其他人如何使用这样的HTTP服务器。例如,新开发人员应该知道如何在IIS/Apache上设置SSL证书或gzip压缩,但是他们必须向您学习如何在HTTP服务器上进行此操作,以及是否支持此功能。
    • 如果这是您第一个要编写的HTTP服务器,那么您将需要花费大量时间学习和研究各种标准和约定,这些标准和约定不在应用程序真正目标的主要业务领域之内。
        4
  •  1
  •   SeanX    16 年前

    我通常是独立开发的,因此我获得了更好的调试经验,然后部署为ISAPIDLL。

        5
  •  1
  •   Stijn Sanders    16 年前

    我也曾有过几次想知道这一点。

    我也在研究一些iInternetProtocol实现,使InternetExplorer能够使用其他的URL模式。

    所以我不久前开始了一个开源项目: http://xxm.sourceforge.net/

    它使您能够在ISAPI扩展、独立服务器之间自由切换,也许更晚一些。(一个Apache模块和一个Firefox协议处理程序正在开发中。)

    Delphi代码和HTML与其他Web脚本语言一样被合并到同一个源文件中,但是使用(快速)Delphi编译器构建用于运行网站的库。

        6
  •  1
  •   Gerard    16 年前

    我已经编写了几个应用程序来实现IndyHTTP堆栈并提供Web服务。这既简单又复杂。当您开始处理线程时,复杂性就出现了,因为您需要知道Indy是如何为HTTP请求创建线程的。因此,将它与服务器代码集成可能需要一些考虑,特别是当服务器连接到数据源或某种类型的公共控件时。

    此外,您还需要管理所有的安全性、对文件的访问,以及一个普通的Web服务器将自己做的其他几乎所有事情。这就是你可能会失败的地方,因为印地的例子有限。

    我已经说过,我发现Indy10HTTP服务器非常健壮,如果您针对特定的需求,比如仅仅根据您的应用程序正在做的事情来提供XML,那么它可以很好地工作。您可以完全控制服务器正在做什么,并且可以选择不同的部署模式-Windows服务、独立应用程序等…

    如果您有一个设计良好的线程安全应用程序,那么在它上面实现HTTP就如同将IndyHTTP服务器组件放到表单或单元上一样简单。不需要为Web内容复制任何代码。

        7
  •  0
  •   skamradt    16 年前

    我总是专注于ISAPI和使用 IDDebugger 用于调试此进程。这将为您提供两个方面的最佳选择,即针对最终部署的同一版本进行调试。不幸的是,我没有为Apache开发,因此无法说明它的易开发性。

    因为我使用了这个方法,所以我不必担心独立版本和未同步的ISAPI版本之间的更改,并且可以很容易地将客户版本放到我的测试环境中,复制任何特定的行为,然后使用修复程序对该行为进行测试,并绝对确保它在部署到现场时可以工作。

    有太多的事情需要担心,甚至考虑使用面向互联网的独立Web服务器。最好将这种担忧(以及多年的经验)交给IIS/Apache。

    推荐文章