套接字服务器与标准服务器的区别

4
我正在开发一个项目,其中大部分是服务器端软件。我开始使用套接字库在C++中编程。但我的其中一位合作伙伴建议我们使用标准服务器,如IIS、Apache或nginx。
从长远来看,哪个更好?当我在C++中编程时,我可以直接访问原始请求,而在使用标准服务器的情况下,我需要使用脚本语言来处理请求。无论如何,哪个选项更好,为什么?
此外,当涉及到像DDOS攻击等安全问题时,标准服务器是否已经有防护措施?如果我想在套接字服务器中实现它,最好的方法是什么?

这完全取决于你的应用程序。如果你正在做的事情已经被上述某个工具覆盖了,那么就不要重复造轮子。 - Oliver Charlesworth
1
这真的取决于您的需求。如果您想要做一些只有自己编写服务器才能实现的事情吗?像Apache和IIS这样的应用程序经过了充分的测试,比您在任何合理的时间内能够制作的任何东西更加稳定和安全,因此必须有非常好的理由不使用它们。 - Björn Pollex
2个回答

2
“服务器端软件”可以指很多不同的东西,例如一个简单的应用程序只是在特定端口上“回显”所有内容,或者是一个 Telnet/FTP 服务器,或者是运行许多“服务”的 Web 服务器。
那么你的特定应用程序在这个可能性范围内的哪里?如果没有更多的信息,很难提出任何建议,但让我们看看...
1. Web 服务,即您的“服务器端”需求是处理单个请求并在完成某些业务逻辑后作出响应。通常通过 SOAP/XML 进行通信,如果您有基于 Web 的客户端,则这是理想的(尽管没有阻止您通过独立客户端访问这些服务)。通常您将这些托管在 Web 服务器上,通常它们最容易用 Java 编写(我还没有遇到过需要使用 C++ 编写的 Web 服务!)
2. 简单的网站 - 与上述略有不同,响应 HTML get/post 请求并提供静态或动态内容(我猜这不是您想要的!)
3. 独立服务器响应某些特定内容,在这种情况下,您必须实现自己的“消息”/协议等,服务器将在收到请求时执行特定功能,可能会发送响应。关键是服务器执行某些特定任务,而不是通用容器(此时,1更有意义!)
那么您的应用程序在哪里?如果是 1/2,请使用 Java 或某些脚本语言(例如 Perl/ASP/JSP 等)。如果是 3,则可以使用 C++,如果这样做,请使用适当的抽象,例如 boost::asio 和 Google Protocol 缓冲区,可以节省很多麻烦...
关于安全性,当然会不断发现漏洞和安全漏洞,但某些 OS 项目的好处是社区将处理并修复它们。让我们这样说,使用它们比使用自己定制的手动实现更安全,您能够解决它们多年来遇到的所有问题的可能性非常小(不是贬低您的能力!)
编辑:现在有了一些更多的信息,这是一个可能的方法(这是我过去所做的,并且我大部分时间都使用 Java..)
1. 面向客户端的服务器应该是可靠的,特别是如果它在互联网上,这里我会使用经过验证的产品,例如 Apache 或 IIS(取决于您有哪些技术)。在我看来,我会选择 jBoss AS - 非常强大且易于定制的工具,并与许多不同的东西集成得非常好(当然全部是 Java!)然后,您可以有一个简单的 Java 位,可以委托给实际执行工作的服务器进程..
2. 对于服务器进程,如果您熟悉,则可以使用 C++
我之前漏掉了一个关键点,那就是1和2如何相互通信。在这里,您应该查看开源消息产品(比asio或协议缓冲器更高级),我会推荐Zero MQ或Red Hat Messaging(两者都是MQ消息协议)。这种“消息总线”的巨大优势在于服务器之间没有紧密耦合,如果使用自己编写的实现,您将需要做很多样板来使交互正常工作,而使用MQ等产品,您将拥有跨平台通信而无需深入了解细节...如果选择使用这样的产品,您可以节省很多时间和麻烦。(顺便说一句,还有其他消息产品可用,有些更易于使用,例如Tibco RV或EMS等,但它们是商业产品,许可证将花费很多钱!)
使用消息传递解决方案后,您的服务器变得非常简单,因为它们只需要处理传入的消息并将消息再发送出去,您可以专注于业务逻辑...
以上是我的两分钱意见... :)

好的。现在,我有一个大致的答案,让我再具体一些。我的项目大致上有5个服务器端组件,其中只有1个组件负责所有内容服务。其余部分在多个类似实例之间交互,以处理用户数据并从中得出结果。1/2/3中的所有组件似乎都是内容服务器的最佳选择,因为它只是单向客户端到服务器的交互。但对于其余部分,这是双向通信。我该怎么做呢? - Bhakta Nall
顺便提一下,协议缓冲区和安全方面是很好的建议。谢谢 :-) - Bhakta Nall

2
如果你选择 Nim 列表中的第一种解决方案(Web 服务),我建议你查看 WSO's Web 服务框架 for C++ , Axis CPPAxis2/C Web 服务框架(如果你不限于使用 C++)。Web 服务可能是你需求的最佳解决方案,因为你可以快速构建它们并将其作为处理或代理模块在系统的服务器端使用。

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