c++ - 套接字服务器与标准服务器

标签 c++ apache sockets scripting

我正在一个项目中,其中很大一部分是服务器端软件。我开始使用套接字库在C++中进行编程。但是,我的一位合作伙伴建议我们使用IIS,Apache或nginx等标准服务器。

从长远来看,哪个更好?当我使用C++进行编程时,我可以直接访问原始请求,而在使用标准服务器的情况下,我需要使用脚本语言来处理请求。无论如何,哪个是更好的选择,为什么?

此外,当涉及DDOS攻击等事件的安全性时,标准服务器是否已具有保护功能?如果我想在我的套接字服务器中实现它,最好的方法是什么?

最佳答案

“服务器端软件”可能意味着很多不同的事物,例如,这可能是一个琐碎的应用程序,它将所有内容“回显”到特定的端口,telnet/ftp服务器到运行许多“服务”的网络服务器。

那么,您的特定应用程序在这一切可能性中位于何处?没有更多信息,很难提出任何建议,但让我们看看。

  • Web服务,即您的“服务器端”要求是处理单个请求并响应已完成的一组业务逻辑。通常,通信是通过SOAP/XML进行的,如果您喜欢基于Web的客户端,这是理想的选择(尽管没有什么可以阻止您通过独立客户端访问这些服务)。通常,您如上所述将它们托管在Web服务器上,并且通常它们是最简单的用Java编写的(我还没有遇到需要用C++编写的一个!)
  • 简单的网站-与上面的网站略有不同,重新生成HTML获取/发布请求,并提供静态或动态内容(我想这不是您想要的!)
  • 对特定内容做出响应的独立服务器,在这里您必须实现自己的“消息传递”/协议(protocol)等,并且该服务器将对传入请求执行特定功能,并可能将响应发送回去。这里的关键是服务器执行特定的操作,而不是通用容器(在这一点上更有意义!)

  • 那么您的应用程序在哪里呢?如果1/2使用Java或某些脚本语言(例如Perl/ASP/JSP等),如果使用3,则可以使用C++;如果使用3,则可以使用适当的抽象,例如boost::asio和Google Protocol Buffer ,省去很多头痛...

    关于安全性,当然总是会发现错误和安全漏洞,但是其中一些OS项目的好处是社区会解决并修复它们。只是说,您将比使用自己的自定义滚动植入更加安全地使用它们,能够解决他们生活多年以来遇到的所有问题的可能性很小(不尊重尽你所能!)

    编辑:现在,有了更多的信息,这是一种可能的方法(这是我过去所做的,并且我在大多数情况下都认为Java ..)
  • 面向客户端的服务器应该可靠,尤其是。如果是通过Internet,则在这里我将使用一种经过验证的产品,例如Apache或IIS之类的好东西(取决于您可以使用的技术)。恕我直言,我会选择jBoss AS-真正功能强大且易于定制的套件,并与许多不同的东西很好地集成在一起(当然所有Java!)然后您可以使用一小段Java,然后可以将其委派给您的实际服务器工作的过程..
  • 如果您对
  • 感到满意,那么对于服务器程序,您可以使用C++。

    我遗漏了一个关键点,这就是1和2彼此交谈的方式。在这里,您应该查看开源消息传递产品(比asio或 Protocol Buffer 更高的级别),在这里,我将看到零MQ或Red Hat Messaging(都是MQ消息传递协议(protocol))之类的东西,这是一个很大的优势这种“消息总线”的类型是,服务器之间没有紧密的耦合,使用自己的手动实现,您将做很多样板工作,以使交互工作正常进行,例如MQ,您将无需深入细节即可进行多平台交流...您将节省大量时间,并且如果选择使用类似的东西也可以节省很多时间。.(顺便说一句,还有其他消息传递产品,其中一些更易于使用-例如Tibco RV或EMS等,但是它们是商业产品,许可证将花费很多钱!)

    使用消息传递解决方案,您的服务器变得无足轻重,因为它们仅处理传入的消息并再次发送回消息,因此您可以专注于业务逻辑...

    我的两个便士... :)

    关于c++ - 套接字服务器与标准服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4117648/

    相关文章:

    apache - 我应该将 OpenSSL 或 gnutls 与 Apache 2.4 一起使用吗?

    linux - Tomcat 在端口 80 上工作,但不在 8080 上工作。防火墙已关闭

    apache - 在 vhost 文件中使用符号链接(symbolic link)

    java - 网络上的套接字

    c++ - 关于C++中的递归函数(初级)

    c++ - 为什么 snprintf 在打印单个数字时始终比 ostringstream 快 2 倍?

    c++ - 为什么while循环不需要用户在c++中输入

    ios - 在回调函数上设置 uilabel

    java - Android,setReuseAddress 不起作用

    c++ - std::generate_n 算法需要复制 ctor。如何在下面的代码中避免这种情况?