C ++用于制作网站/ Web应用程序有多受欢迎?
我不知道为什么这个问题困扰着我,但是一次又一次地回到思想 – 为什么不用C ++来制作网站? 到目前为止,我都不知道(除了有关雅虎的传言)。 大多数使用PHP,Java或ASP.NET。 有些是build立在Ruby或Python上,但即使是less数。
同时,看着StackOverflow,似乎C ++仍然是一个非常stream行的语言,其中包含许多项目。 为什么不为网页?
所以 – 你对这个问题了解多less? 有没有用C ++编写的网站? 有没有任何框架/库可以帮助你做到这一点? 你有没有做过? 如果是的话,你遇到了什么根本性的问题,你会推荐给别人吗?
我主要是一个C ++程序员,所以当我说C#和Java是更现代化的语言时,我并不打算把它当作C ++的大满贯,更适合99%的你想要做的应用程序开发。 C#/ Java /等的缺点。 用户需要在他们的PC上安装庞大的运行时,如果你的用户没有他们,那么他们将不得不安装它们。 因此,用C ++编写消费者应用程序通常会更好,因为在那里只有很less的依赖关系,奶奶也不需要知道如何安装.NET Framework 3.0。
对于Web应用程序,您的用户将只使用Web浏览器,因此您可以使用任何您想要的语言编写程序。 那么为什么不用现代的,更好的语言来写呢?
(再次,在C ++程序员跳过我之前,让我说,我已经是一个主要的C ++程序员15年以上了,如果忽略现代语言对于大多数应用程序开发来说更容易和更好,那将是愚蠢的。
简单地说,在用PHP
实现性能问题之后,我对C++
有了很大的兴趣。 (我主要是一个PHP
程序员)。
我看到的优点
-
接近硬件语言(这增加了性能)。
-
大大支持OOP(是的,你只需要阅读更好的书籍来向你解释这个)。
-
极其轻便,需要较less的服务器资源(为您节省大量成本)
-
关于内存pipe理,这真的不是一个问题。 C ++中有些东西可以让你自动pipe理内存(特别是智能指针&
share_ptr
)。
我已经开始使用CppCMS Web开发框架 。
我习惯了C ++,花了一些时间学习,但最后我在那里:)
它(C ++)只是让你更有组织。 是的,比Java更有组织性,因为在创build对象方面你不能不小心,所以你需要删除它们。 但是如前所述,C ++中的智能指针可以帮助您自动执行此操作。
如果这些看起来太多,那就值得。 假设您打算使用C ++ Web Development思考长远的方面。 对于短期目标,像PHP(或任何web-dev语言)这样的语言可以达到这个目的。
关于CppCMS:
-
支持像C ++和HTML Code之间交换的结构,就像在html之间使用
<?php ?>
标签一样。 您可以在此框架的模板语言之间使用您的纯HTML文本。 当您将代码提供给UIdevise者时,这是最主要的优势。 -
支持单独编译视图,所以对视图进行更改,不会要求您编译整个项目,类似的,只更改为核心业务逻辑文件,不会要求您重新编译视图文件。 它就像Java的Servlets和JSP文件的概念一样。
-
它的跨平台:)
MY2C。
我build议在http://www.webtoolkit.eu/使用C ++ webtoolkit Wt(发音为Witty)。
这个框架(带有集成的应用程序服务器)允许您根据小部件和信号/插槽连接来deviseWeb应用程序,并将大部分Web应用程序留在库中。 由此产生的应用程序是面向对象的,严格的types和完全可维护的。 该库自动检测浏览器的function,并使用正确的方式来呈现网站,避免浏览器错误。
我不打算开始一场语言战,但是Wt是用现代C ++风格编写的,它不需要导致内存泄漏和其他一直与C ++应用程序相关的事故。 我同意你的陈述的有效性:为什么不用C ++编写Web应用程序? C ++和任何其他语言一样好。 这不是一个performance的问题,这是一个风格问题。
很多web开发归结为数据库查询和string操作。 这两种方法在dynamic语言中比在C ++中更容易完成。 使用C ++的主要原因是为了提高效率,尽pipe大多数网站并不需要那么多的效率。
网站可能是用其他语言编写的,但是用C ++编写的组件称之为数字处理。 但是网站的主要逻辑很less用C ++编写。
我认为,不使用C ++构buildWeb应用程序的唯一原因是缺less用于它的库 (众所周知的库)。 我看不到在C ++中无法完成的string操作,networking连接或数据库访问。
selectC ++的一大优势是,如果你的公司已经有很多C / C ++代码,那就避免引入另外一种语言 ,它有自己的IDE,标准库,自定义书写库,编程语言的怪癖和限制,图书馆的怪癖,轮廓仪等…
大约两年前,我和雅虎的一名工程师就这个问题进行了一次对话,因为我听到了同样的传言。
他说,历史上雅虎的态度是用C ++来构build非常优化的应用程序,而他们的竞争对手(Facebook,Google)倾向于使用哪种高级语言来让他们最快地完成工作。
这样做的好处是,他build立的系统使用了10台服务器,而相同的Google系统需要100多台(这是他的说法,我没有办法validation它)。 缺点是上市时间要长得多,程序员不得不加快系统速度,引入新的function,所有的编程人员必须绝对是A1级才能在系统上工作。
他的观点是,没有认识到“迭代速度最快的人”这个规则是雅虎失地的原因之一。
C ++对文本操作(就内置支持而言)的支持很差,而且全都是关于在Web上操纵和格式化文本的。 另外性能瓶颈在大多数情况下是数据库和networking,因此,如果使用更快的语言编写,这并不重要。
我在C做了一个网页,在很久以前对上传的图片做一些image processing。 这是相当高性能的,但现在想,我可以更有成效的分离image processing的东西作为一个cli工具,这是从PHP / Perl /任何你手中调用。
也有人不想自己pipe理内存。 就像巴甫洛夫的狗一样,当我们在整个编程生活中听到“指针”一词的时候,大多数人都被训练成哭泣。 所以手动内存pipe理对于Web编程来说是“不好的”。 虽然对于普通的CGI来说并不是一个很大的问题。 你的CGI可能需要所有的内存分配给它的整个短暂的生命,只是让操作系统释放它。 应用程序容器可能不是这种情况(无论如何依赖于实现)。
围绕C ++的文化比网上使用的相对较新的语言更丰富多彩(比如python,ruby,更新的php版本,值得注意的例外是perl,这是关于做不同的事情),由于它的一般范围和年龄,没有一个明显的“应该像这样做“一个新手可以迅速拿起并开始使用的方式。
当然,使用C ++进行Web编程更容易,但主要集中在embedded式系统上。 无论如何,如果您正在为一个小型embedded式系统进行编程而不是手动内存pipe理,并且挤出最后一个可用周期,则没有多lessselect。
当时间花在他们身上时,指针是相当简单的。 简而言之,指针允许避免一遍又一遍复制大型对象。 这对性能有很大的改进,如果正确实施,可以很容易地进行。
以下是一些您可能感兴趣的网站:
http://cppcms.com/wikipp/en/page/main
http://www.micronovae.com/CSP.html
http://www.seastar-project.org/
http://developer.capeclear.com/gsoap
http://www.roguewave.com/products-services/hydraexpress
http://www.linuxpromagazine.com/online/news/web_application_with_c_and_fastcgi?category=13426
在“C ++ web应用程序”上search将帮助你。
祝你好运
这些post中有很多关于C ++的错误信息。
首先,如果您正确使用构造函数,析构函数和堆栈分配,则几乎不需要处理内存问题 – 实际上并不是那么糟糕。
其次,C ++ Boost库非常棒。 Boost很容易使用,库devise得很好,而且还有几乎所有需要编写的库。
第三,C ++比大多数替代品更现代。 真的,唯一可以在每个function上竞争的语言是Python和Haskell(最好的语言)。 举个例子,Java现在才刚刚得到closures的真正支持。 好的,编译时间和dynamic特性之间有很大的区别,但是我离题了。
我认为唯一持有c ++的是最初需要一点精力; 以及15岁的偏见基于不断发展的语言的旧版本。
所以说了这么多,我会用Python进行web开发。
编辑:另外值得一提的是C ++在Visual Studio中具有最好的debugging器。
在这里表格: http : //www.jroller.com/craiger/entry/where_are_all_the_c
克雷格Tataryn写道:嗨Bjarne,我是一个Java程序员的职业,并想知道
一些东西。 在Java世界里,我们有Sun和Sun(或者一个commitee)为那些有利于Java的东西生成规范
生态系统(如果我可以使用这个kitchy术语)。 所以,两个
规范对networking应用程序开发人员意义重大:Java Servlet规范Java服务器页面规范
在Servlet规范中,Sun为“Web应用程序”是什么定义了参考框架,以及如何创buildWeb应用程序容器,他们可以按照此规范进行操作。
当然,这种情况如火如荼,无论是喜欢还是不喜欢Java,这些规范都为开发人员build立了一个将Java作为networking语言(敢于说“select”)的良好环境。
我有许多C ++程序员的朋友,所以我询问他们使用什么types的框架来构buildWeb应用程序。 他们要么a)不写Web应用程序b)写自己的框架( http://labs.wexussoftware.com/ )或c)使用Ruby on Rails。 最后一个select被形容为“使用正确的工具”
我想我正在寻找的答案是,为什么没有C ++渗透到Web应用程序的边界? 它缺乏一个实体来写一个
规范这样的事情? 在我的谷歌search,我甚至找不到C ++的商业Web应用程序框架。 我只是不明白,因为它会产生一些相当快,精通资源的webapps。
你有第一行“Java有Sun”的答案,或者更准确地说,“Sun有Java”。 也就是说,有一个组织愿意支付几十万美元用于发展,并以数十美元为营销支持。 C ++社区从来没有这样做。 相反,许多组织build立了他们认为对自己的客户很重要的领域的工具。
因此,C ++社区没有大规模的框架(除非你计算CORBA),只有应用程序(通常是大规模的应用程序,如亚马逊,谷歌,eBay和amadeus)。
“幕后”有很多C ++,比如财务软件,embedded式系统,游戏,基础设施(如CORBA,JVM),操作系统。 看我的应用程序页面。 没有什么机制可以看到(像Java的小咖啡杯)。
- Bjarne Bjarne Stroustrup, http://www.research.att.com/~bs
另外还有一个库POCO C ++库 。 我用它来做我的大学项目之一,它很不错。 也有很好的文档开始,你可以在这里find它
C ++是一种通用的语言,但ASP,PHP等被devise用来制作网站,所以它们成为networking上非常stream行的语言。 许多“长大”与ASP(也许PHP)的人转移到ASP.NET(所以VB.Net和C#)。
我不是一个Java的人,所以我不知道为什么这个特定的语言越来越受欢迎。 我在想,因为它已经(并且)在大学里受欢迎,并且因为Java是第一批获得networking真正好工具包的语言之一。
我怀疑现在,C ++可能被用在embedded式Web服务器上; 例如你可能在路由器中find的。 我注意到一个叫做Wt的 C ++ web开发框架。
除了谷歌的search网站 , 亚马逊的原始设置 (“传统#1”:我可以find最好的链接)或从97到2002年的eBay (PDF,第9-14页),这是不常见的。 因为正如已经指出的那样,它并不是真正为此而devise的。 但是使用C ++来实现一些Web服务(尽pipe没有内置的XML支持,你可能会通过 其他格式的 数据发送数据 ),这是一个不错的主意,你的站点可以调用这些服务。
如果你在IIS上,你可以使用ATL Server 。
如果你想这样做,你需要一个模板系统(上面的Google ctemplate )和一个数据库访问层 。 如果要将参数作为URI的一部分传递(也就是说,作为“part / of / the /”),则还需要了解如何挂接到Web服务器(使用IIS上的ISAPI,Apache模块)path/到/与/命令“)。 如果您仅通过GET或POST传递参数,则可以使用CGI。
你可以用任何语言做任何事情。 这是一个使用正确的工具来完成这个工作的问题。 由于网站主要是关于string处理的,所以使用一个以string处理为强项的语言是有意义的。 另一个缺点是没有任何/许多C ++工具可以提供帮助。
也就是说,在C ++中编写一些后端,数字处理代码,然后使用另一种语言将其连接到Web,没有任何问题。 我们用一些在100到10000个节点集群上运行的重型并行仿真来实现这一点。
坦率地说,有更好的语言用于web应用程序开发。 有些是基于C / C ++(想到PHP),但基本上它们是C / C ++之上的抽象。
在CGI环境中没有任何东西阻止你使用C ++,但是要困难得多。 使用具有内置Web应用程序开发所需function的语言(如会话/ cookie处理和请求/响应生成)将会容易得多。
据说,我写了一个基于C的应用程序来与支持基于PHP的Web应用程序的第三方数据库进行交互。 他们有PHP和C的API,但PHP API完全是缓慢的方式,所以我写了一个被PHP调用的C应用程序。
现在你有另一个select: node.native。它是node.js的一个端口
示例代码如下所示:
#include <iostream> #include "http.h" using namespace native::http; int main() { http server; if(server.listen("0.0.0.0", 8080, [](request& req, response& res){ res.set_status(200); res.set_header("Content-Type", "text/plain"); res.end("C++ FTW\n"); })) std::cout << "Server running at http://0.0.0.0:8080/" << std::endl; return native::run(); }
我们几乎完全用在我上一份工作上。 它运行良好,虽然我们使用自己的本土网页引擎(如ASP或PHP,但我们自己的调合),我可能不会在将来由于各种原因使用。 这些网站在世界各地都很活跃,而且之前有一个很好的机会(因为NDA我不能提供更多的细节)。
但是,要回答你的问题,C ++是一个优秀的多用途语言,包括创build一个Web服务器。 为了创builddynamic内容,你可能需要做一些努力,但是如果现有的C ++ web应用程序框架可供你使用,我不会感到惊讶。
从我的阅读中,不使用C ++的原因是因为没有很多好的选项来快速启动c ++脚本。 CGI非常慢,它通常会消除使用C ++可能带来的任何性能上的好处。 另外,现代语言有VM(.NET,Java等)或解释器,它们总是有效的运行,并且能够快速地派发新的程序实例,而无需内核监督/干预。 另外,这些中间件非常适合与服务器一起重复执行相同的程序和大量的networking客户端。
虽然程序员可以想象地解释这些虚拟机/口译员所做的所有事情,但要做得更好或更快,这是很困难的。 另外,这些语言都提供了更快的开发速度,对中间件层的改进直接有利于您的项目。
这并不stream行,因为没有人会为此写一个像样的模板系统,这并不难。
顺便说一句,谷歌自己的networking服务器(从http头:“服务器:gws”)是用C ++编写的。
查看Google的Native Client SDK,使用本地代码(例如C,C ++)创build在最新版本的Chromium中运行的Web应用程序。
我们做了一次自定义的c-lib来创build基于c的应用程序来使用fcgid来获得极好的请求处理能力。 但是,这远非易事。 并要求非常好的资金和理由这样做。 现在,使用php编写代码比较便宜,并且获得体面的硬件来支持它。 但是,在某些极端情况下,它是非常值得的C / C ++选项
如果C ++用于任何新的网站构build,我会感到惊讶。 我曾经使用它来为MTS制作COM组件,当时香草ASP和事务服务器是做事情的方式,但现在有更高效的语言和框架可以使开发更加快速。
为什么不用C ++制作网站? 因为C ++是系统编程的低级语言。
在制作网站时,您不想考虑循环依赖和对象模型,因为瓶颈可能是networking或数据库,所以没有任何收获。
我有几个“客户区”网站,实际上是用C ++编写的ISAPI DLL,所以它绝对是可行的。 我们仍然使用它们是因为我们正在构build真正的旧代码(但是工作),还因为我们可以将dll发布给我们的经销商,而不需要他们看到底层的源代码。
但我不得不同意,这是一个非常笨拙的方式来build立一个网站。 而且,对ISAPI DLL的支持已经非常快速地下降了。 Visual Studio 2008不再支持它们(我不知道大概是2005),在Vista上启用它们真的很痛苦。
如果你只知道C ++和HTML,这是一个可能的解决scheme,但是肯定有更好的select。
我在学校学习了c / c ++,并在Visual Basic应用程序上工作。 我喜欢graphics用户界面和事件,但是,有时候你想用c ++数据结构来处理数据。 所以连接是一个很好的select。 微软的产品提供了这么多,为什么重新发明轮子。
不过,我是学习网页开发的新手。 但是,我喜欢一些.net正在做的事情。 一切都在盒子外面,据说可以节省时间,但是我花了更多的时间去寻找合适的盒子。 所以,这是一种不同的学习曲线。
我认为一些应用程序取代c / c ++的原因很容易识别,这是学习曲线。 我可以把一个网站用html,b和一个数据库交互,脚本来处理这个交互。
但我不明白为什么c ++被淘汰作为后端编程工具。 我喜欢使用PHP来调用一个C ++程序的评论。 我想知道如何做到这一点。 以及如何共享一个对象或使用此方法传递一个对象到C ++?
我想在开始任何项目之前,先研究一下什么是最先有助于消除危机,当你碰壁时发现你不能做点什么。
I'm sure there actually are some sites using C++ as backend, however, I expect those are mainly older sites. For instance I know a school in the United Kingdom that relies on a C++ backend, can't say I know the motivation behind it, but it's definitely possible. If I'm not mistaken it's even possible to use the C++ code through IIS as modules, which should give you some advantages over writing the complete server application yourself.
It's doubtful whether anyone would recommend you to use C++ though, it could have quite some performance advantages for some applications. Nonetheless, it'll probably also make it a lot more complicated; languages 'made for the web' come with so many functions and optimizations out of the box, you'd probably be (partly) reinventing the wheel.
In order to write websites in C++, you simply need to be a programmer. This doesn't happen in all languages, this is precisely the beauty of PHP and Ruby. They require few programming skills.
Sometimes programmers may use these modern languages to improve their productivity, and here is where frameworks become handy. With C++ web frameworks like WT or BinaryTiers , programmers can write websites and complex web applications in few minutes like if they were using PHP or Ruby.
An example of this is Lovingsports , a social networking website entirely written in C++ using the BinaryTiers Web Application Framework