使用C ++和MySQL构建Web应用程序是否存在任何概念上的弊端?


10

我继承了一个非常有趣的项目,在这里有一个很好的机会将现有软件移植到SaaS Web应用程序中。随着项目的继承,代码库/框架已经定义为C ++和MySQL。该应用程序本身已编译并在Windows Server上作为EXE运行。UI是基于Web的,该应用程序可作为一种服务器使用。根据我对现代Web应用程序的了解,这也许是一个不寻常的选择。如今,大多数人似乎选择使用PHP框架或Ruby on Rails。当然,这是我从阅读有关该主题的博客中获得的印象。因此,我非常想知道MySQL支持的C ++ EXE是否是Web应用程序的坚实基础,还是我们是否应该以其他方式构建?


您所描述的听起来更像是服务器进程,而不是Webapp。对于服务器进程,PHP或RoR当然是不寻常的选择。您实际上有什么问题?
本杰明·班尼尔

该exe可能使用新的Hostable Web Core(awesomeideas.net/page/IIS7-Hostable-WebCore.aspx)还是真的从头开始实现了自己的HTTP服务器?如果是前者,那么也许他们真的想用C ++和自托管它移植到客户机做出一个非常快速的应用程序..
吉米·霍法

当然,任何理智的人都会使用POCO的Net :: HTTPServer之类的东西,而不是从头开始编写HTTP服务器。但这不像RoR那样,例如Python框架不打包一些Web服务器。
本杰明·班尼尔

4
将c ++用作Web应用程序的后端并不罕见。Google搜索是用C ++编写的。雅虎的许多应用程序都是c ++。数以百万计的人使用的每个AAA Web应用程序几乎都是用c ++编写的。
Tydus勋爵,2012年

是的,该应用程序被设计为自定义Web服务器。因此,Web应用程序方面来自HTML管理员UI和功能集。
jnthnclrk 2012年

Answers:


20

它是确定使用C ++做一个Web应用程序IF的好处远远大于成本,效果显着。Google,Amazon,Facebook都是使用C ++构建的,旨在提高速度,内存和能源的效率-也就是服务器成本。

但是,正如您猜到的那样,为此使用C ++有一些缺点。不过,这取决于您的工具。

首先让我在此引用cppcms 网站

何时应使用CppCMS。

C ++语言远未在Web开发中流行,其原因有很多:缺乏适当的工具,开发人员的技能等等。

但是,在某些领域中,使用CppCMS进行C ++ Web编程变得非常有用和高效,在某些领域这只是浪费时间。

什么时候应该或可以使用CppCMS?

1.高负载的网站和应用程序,每秒点击数以十万计,其中需要高性能,效率和可伸缩性。

2,需要可扩展的Comet / Server Push技术的应用程序-CppCMS可以有效地处理成百上千个同时进行的HTTP连接,而资源占用最少。

3.将Web界面嵌入到现有的C ++应用程序/服务中,而只需很少的附加库。

4,嵌入式功能不足的设备-CppCMS允许以相对较低的硬件成本创建功能丰富的应用程序,这些应用程序可以相当快地执行。

什么时候不使用?

如果您创建不需要高负载并且需要非常短的上市时间的小型Web应用程序,那么Django或RoR之类的工具可能更适合此类任务。

C ++特有的缺点是:

  • 与其他语言相比,编译时间可能非常非常非常慢。这可能会影响迭代,发布间隔以及开发人员的道德。确保它值得。
  • 大多数时候,您需要编译更改。可以避免,但这是正常现象。
  • 编写现代C ++使其变得容易(学习,阅读,编写,调试等),但是许多C ++开发人员都不知道什么是现代C ++。因此,如果您在团队中工作,则需要整个团队都对Modern C ++有很好的了解。如果没有,您将很容易陷入非常复杂的错误。就是说,这不仅仅是语言问题,而是人员问题。仅仅是C ++的历史并没有使它易于掌握。好的教学并不像现代(历史)语言那样普遍。
  • 核心C ++语言对Unicode的支持仍然很差,这使其成为痛苦的潜在根源。只需在各处使用UTF-8和一些库(研究boost)即可对其进行管理。
  • C ++标准不知道什么是库。因此,我们使用常规方法在不同的编译器/链接器/ OS上进行管理。如果您开始需要跨平台的代码,而这些代码需要“动态”加载/卸载某些模块,那么这可能是个问题。

也许看看CPPCMS?或者,如果您想制作一个GUI风格的网站,也许是wt?

还要检查以下问题:


3
我的理解是Facebook是用PHP编程的,但是他们也为Linux用C ++构建了自己的PHP原生编译器。Facebook开发该编译器的主要原因是为了减少运行服务器的电力成本。它并不是真正的速度(它更快),而是每个请求需要较少的CPU使用率的事实。这是一个开源项目,可以在这里找到。developers.facebook.com/blog/post/2010/02/02/...
Reactgular

1
是的,原因各不相同,这就是我提到能源和服务器成本的原因。话虽如此,Alexandrescu最近在一次采访中说,我相信,越来越多的Facebook代码直接用C ++编写,但如果我的记忆正确的话,他没有提及原因。愚蠢:它们还提供了一个开源库充满C ++效用/算法facebook.com/notes/facebook-engineering/...
KLAIM

还要注意,即使首先使用PHP编写代码,然后再将其转换为C ++,我指出的三个缺点仍然是正确的。
克莱姆(Klaim)2012年

2
另一个C ++ Web框架:wt(机智)。适用于想要构建像桌面应用程序一样运行的Web应用程序的人。对于移植,这是一个不错的选择。
K.Steff 2012年

我认为所有这些网站都有用多种语言编写的组件。C ++最有可能用作需要微调内存管理的代码部分的优化。
jiggy 2012年

3

在PHP中运行的Wordpress并安装了一些插件,这使我的Winders服务器一触即发。因此,我对用C ++实现Web应用程序的想法完全没有问题。速度是网络体验的关键部分。

图形设计帐篷推动了大多数Web项目的发展。PHP是一种运行在HTML中的晦涩的脚本语言。允许PHP作者转入和转出HTML。结果,使用HTML有很多好处。

不过,您可以在C ++中实现任意数量的HTML模板解决方案。

可以为您提供一长串可以快速开发的Python和PHP框架,但是如果您有很多时间,那么C ++肯定是可行的。

我不明白您是决定在Windows上使用C ++的决定。大声笑


1
经典的稻草人论证,有很多C ++以外的wordpress / php更好的快速替代品。我并不是说C ++不是一个合适的选择,只是您的论点并不是很好。
Jimmy Hoffa 2012年

我同意你的看法。我认为我没有尝试将wordpress用作替代方案。只是我最近的经验表明,很难从流行的框架中获得良好的性能。
Reactgular 2012年

1
StackExchange在ASP.NET MVC框架上运行。Node.Js是轻量级的高性能,如果您真的想要一些可笑的性能,可以使用Snap或Yesod Haskell框架yesodweb.com/blog/2011/03/…,Haskell,JavaScript和C#都是高级垃圾收集语言。
吉米·霍法

1
请注意,在许多情况下,服务器上的代码执行速度并不是Web应用程序中的限制因素。大部分时间都花在等待某事(数据库)上,甚至在前端(获取CSS,图像,做JavaScript事情,HTML渲染)上
johannes 2012年

1

当然,这是一个不寻常的选择。C ++并不是在设计时就考虑到Web应用程序的,尽管存在一些库可以使用C ++编写FastCGI应用程序,但您还需要做更多的工作才能使基本应用程序正常运行。“ Web语言”通常为您做很多事情,而这些事情您必须从C ++的其他地方获得,例如实现HTTP协议,生成HTML等。

而且,Web应用程序主要是关于字符串的,而这并不是C ++最强的一面-语言本身没有内置字符串类型,这导致了一些怪癖,并使字符串处理比更高端的处理更笨拙,语言。在黑魔法的C ++边框中正确处理字符编码。C ++可能会在看起来相当纯真的代码上真正崩溃,而使用高级语言的可能性则很小(它们也可能崩溃,但是在大多数情况下,Web服务器可以正常恢复,尤其是在使用基于Perl的平台上。 -request生命周期模型,例如PHP)。

就是说,如果您已经编写了大多数代码库,那么C ++仍然是一个可行的选择。您将需要找到一些库来涵盖各种Web内容(最值得注意的是,您希望能够将独立的HTTP Web服务器集成到程序中,或者通过FastCGI或通过编译为一个模块;您还将需要某种模板库,以使呈现HTML文档变得轻松自如)。

最后,还有开发商市场问题。有大量的C ++开发人员可用,甚至还有更多的Web开发人员,但是重叠可能并不那么大,因此,如果您需要雇用人员来从事此工作,那么与之相比,您会遇到一些困难。 PHP。


1

正如其他人所说,从概念上讲,C ++是Web服务器开发的理想环境。但是,在做出此决定时,有一些注意事项。

用于Web服务器设计的脚本语言的流行是随时间变化的。几乎立即显示结果即可轻松进行简单的更改。您会发现,任何好的Web服务器设计都将提供类似的功能。确实,C ++是实现该目标的绝佳环境。

构建良好的Web服务器应用程序系统的关键是将UI与代码分离。构建Web应用程序环境的目标是避免“您的UI在我的代码中,而您的代码在我的UI中”。

我想仔细研究cppcms之类的系统。我希望它提供类似的东西。

您不需要脚本语言即可提供灵活性和性能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.