我正在开发一个项目,其中很大一部分是服务器端软件。我开始使用套接字库在C ++中编程。但是,我的一个合作伙伴建议我们使用IIS,Apache或nginx等标准服务器。
从长远来看哪一个更好?当我用C ++编程时,我可以直接访问原始请求,就像使用标准服务器一样,我需要使用脚本语言来处理请求。在任何情况下,哪一个是更好的选择,为什么?
此外,对于DDOS攻击等安全问题,标准服务器是否已经有保护?如果我想在我的套接字服务器中实现它,最好的方法是什么?
答案 0 :(得分:2)
“服务器端软件”可能意味着许多不同的东西,例如,这可能是一个简单的应用程序,它“回送”特定端口上的所有内容,telnet / ftp服务器到运行大量“服务”的网络服务器。
那么在你的特定应用所在的各种可能性范围内呢?没有进一步的信息,很难提出任何建议,但让我们看看..
那么你的申请在哪里?如果1/2使用Java或某些脚本语言(如Perl / ASP / JSP等)如果是3,你当然可以使用C ++,如果你这样做,可以使用合适的抽象,例如boost :: asio和Google Protocol缓冲区,为自己省去很多头痛......
关于安全性,当然会发现错误和安全漏洞,但是这些操作系统项目中的好处是社区将解决并修复它们。我们只是说,使用它们比使用自定义的手动模拟更安全,您可能能够解决他们在过去几年中遇到的所有问题的可能性非常小(没有不尊重你的能力!)
编辑:既然有更多的信息,这里有一种可能的方法(这就是我过去所做的,而且我大部分时间都在使用Java。)面向客户端的服务器应该是可靠的,尤其是如果它是通过互联网,在这里我会使用一个经过验证的产品,像Apache一样好或IIS(取决于你有哪些技术)。恕我直言,我会选择jBoss AS - 非常强大且易于定制的工具包,并且可以很好地集成许多不同的东西(所有Java ofcourse!)然后你可以拥有一个简单的Java,然后可以委托给你的实际服务器做这项工作的过程..
对于服务器程序,您可以使用C ++,如果您喜欢的话
我遗漏了一个关键位,这就是1& 2互相交谈。这是您应该查看开源消息产品(甚至比asio或协议缓冲区更高级别)的地方,在这里我会看一些类似Zero MQ或Red Hat Messaging(两者都是MQ消息传递协议)的巨大优势这种类型的“消息传递总线”是你的服务器之间没有紧密的耦合,你自己的手动实现,你将做很多样板,以使交互正常工作,像MQ,你会有多平台的沟通,而不必深入细节...如果你选择使用类似的东西,你将节省很多时间和麻烦..(顺便说一句,那里有其他的消息产品,有些更容易使用 - 例如Tibco RV或EMS等,但它们是商业产品,许可证将花费很多钱!)
使用消息传递解决方案,您的服务器变得微不足道,因为它们只是处理传入的消息并再次发送消息,您可以专注于业务逻辑......
我的两个便士...... :)
答案 1 :(得分:2)
如果您选择Nim列表中的第一个解决方案(网络服务),我建议您查看WSO's web services framework for C++ ,Axis CPP和Axis2/C web services framework(如果您不限于C ++) )。 Web服务可能是满足您需求的最佳解决方案,因为您可以快速构建它们,并将其用作系统服务器端的处理或代理模块。