我正在做一个项目,其中很大一部分是服务器端软件。我开始使用套接字库在C++中编程。但是,我的一个合作伙伴建议我们使用标准服务器,如IIS、Apache或nginx。
从长远来看,哪一个更好?当我用C++对它进行编程时,我可以直接访问原始请求,而在使用标准服务器的情况下,我需要使用脚本语言来处理请求。在任何情况下,哪一个是更好的选择?为什么?
另外,当涉及到DDOS攻击等的安全性时,标准服务器是否已经有了保护?如果我想在我的socket服务器中实现它,最好的方法是什么?
发布于 2010-11-07 20:42:40
“服务器端软件”可能意味着很多不同的事情,例如,这可能是一个微不足道的应用程序,它将所有东西“回显”到特定的端口,从telnet/ftp服务器到运行许多“服务”的ftp服务器。
那么,在这一系列可能性中,您的特定应用程序位于何处?在没有进一步的信息的情况下,很难提出任何建议,但让我们看看。
那么你的应用程序在哪里呢?如果1/2使用Java或某种脚本语言(如Perl/ASP/JSP等)。如果是3,你当然可以使用C++,如果你这样做了,就使用合适的抽象,比如boost::asio和Google Protocol buffers,这样就省去了很多麻烦……
关于安全性,当然总是会发现错误和安全漏洞,但是其中一些操作系统项目的好处是社区会解决和修复它们。这么说吧,你使用它们会比你自己定制的手卷安装更安全,你能够解决他们在这些年里遇到的所有问题的可能性是非常小的(不是对你的能力的不尊重!)
编辑:现在有了更多的信息,下面是一种可能的方法(这是我在过去做过的事情,我大部分时间都在使用Java。)
感到满意,则可以使用C++
我遗漏了一个关键点,这就是1和2如何相互交谈。这就是您应该考虑开源消息传递产品(甚至比asio或协议缓冲区更高的级别)的地方,这里我将考虑像Zero MQ或Red Hat消息传递(两者都是MQ消息传递协议)之类的东西,这种类型的“消息传递总线”的最大优点是服务器之间没有紧密耦合,使用您自己的手写实现,您将做许多样板工作来使交互正常工作,使用MQ之类的东西,您将拥有多平台通信,而不必进入细节...如果你选择使用这样的东西,你将节省大量的时间和麻烦..(顺便说一下。还有其他的消息传递产品,有些更容易使用-例如Tibco RV或EMS等,但它们是商业产品,许可证将花费大量资金!)
有了消息传递解决方案,您的服务器将变得微不足道,因为它们只需处理传入的消息并再次发送消息,而您可以专注于业务逻辑……
我的两个便士。:)
发布于 2010-11-07 21:35:33
如果你选择Nim列表中的第一个解决方案(web服务),我建议你看看WSO's web services framework for C++ ,Axis CPP和Axis2/C web services framework (如果你不局限于C++的话)。Web服务可能是满足您需求的最佳解决方案,因为您可以快速构建它们,并将其用作系统服务器端的处理或代理模块。
https://stackoverflow.com/questions/4117648
复制相似问题