套接字服务器与标准服务器

时间:2010-11-07 12:13:47

标签: c++ apache sockets scripting

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

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

此外,对于DDOS攻击等安全问题,标准服务器是否已经有保护?如果我想在我的套接字服务器中实现它,最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

“服务器端软件”可能意味着许多不同的东西,例如,这可能是一个简单的应用程序,它“回送”特定端口上的所有内容,telnet / ftp服务器到运行大量“服务”的网络服务器。

那么在你的特定应用所在的各种可能性范围内呢?没有进一步的信息,很难提出任何建议,但让我们看看..

  1. Web服务,即您的“服务器端”要求是处理单个请求并响应已完成一些业务逻辑。通常,通过SOAP / XML进行通信,如果您使用基于Web的客户端,这是理想的选择(尽管没有什么能阻止您通过独立客户端访问这些服务)。如你所提到的那样,你可以在Web服务器上托管这些文件,通常它们最容易用Java编写(我还没有遇到需要用C ++编写的文件!)
  2. 简单的网站 - 与上面的略有不同,反映HTML获取/发布请求并提供静态或动态内容(我猜这不是你想要的!)
  3. 响应特定内容的独立服务器,在这里你必须实现自己的“消息”/协议等,服务器将对传入的请求执行特定的功能,并可能发回响应。这里的关键是服务器执行特定的操作,并且不是通用容器(此时1更有意义!)
  4. 那么你的申请在哪里?如果1/2使用Java或某些脚本语言(如Perl / ASP / JSP等)如果是3,你当然可以使用C ++,如果你这样做,可以使用合适的抽象,例如boost :: asio和Google Protocol缓冲区,为自己省去很多头痛......

    关于安全性,当然会发现错误和安全漏洞,但是这些操作系统项目中的好处是社区将解决并修复它们。我们只是说,使用它们比使用自定义的手动模拟更安全,您可能能够解决他们在过去几年中遇到的所有问题的可能性非常小(没有不尊重你的能力!)

    编辑:既然有更多的信息,这里有一种可能的方法(这就是我过去所做的,而且我大部分时间都在使用Java。)

    1. 面向客户端的服务器应该是可靠的,尤其是如果它是通过互联网,在这里我会使用一个经过验证的产品,像Apache一样好或IIS(取决于你有哪些技术)。恕我直言,我会选择jBoss AS - 非常强大且易于定制的工具包,并且可以很好地集成许多不同的东西(所有Java ofcourse!)然后你可以拥有一个简单的Java,然后可以委托给你的实际服务器做这项工作的过程..

    2. 对于服务器程序,您可以使用C ++,如果您喜欢的话

    3. 我遗漏了一个关键位,这就是1& 2互相交谈。这是您应该查看开源消息产品(甚至比asio或协议缓冲区更高级别)的地方,在这里我会看一些类似Zero MQ或Red Hat Messaging(两者都是MQ消息传递协议)的巨大优势这种类型的“消息传递总线”是你的服务器之间没有紧密的耦合,你自己的手动实现,你将做很多样板,以使交互正常工作,像MQ,你会有多平台的沟通,而不必深入细节...如果你选择使用类似的东西,你将节省很多时间和麻烦..(顺便说一句,那里有其他的消息产品,有些更容易使用 - 例如Tibco RV或EMS等,但它们是商业产品,许可证将花费很多钱!)

      使用消息传递解决方案,您的服务器变得微不足道,因为它们只是处理传入的消息并再次发送消息,您可以专注于业务逻辑......

      我的两个便士...... :)

答案 1 :(得分:2)

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