如何通过C ++与Web进行交互(例如在Google上)?


12

多年来,Google以其可笑的C ++数量而著称。如果我错了,请纠正我,但是Google核心搜索引擎的很大一部分是用C ++编写的,不是吗?如何使用C ++编写程序并将其与网站连接?

注意:我不是在寻找Google特别是如何做到这一点,而只是在寻找一般如何做。


好的,Google大部分应用都是用python构建的,现在Java也被大量使用。Google不会限制语言使用。对于网络接口,使用套接字。没有C ++,只有C api。C ++没有它自己的!
user1708086

Answers:


16

任何网络软件都只会通过套接字发送和接收消息,仅此而已。您可以使用任何语言来执行此操作,这不是特定于语言的。

但是,您最好不要为这种工作而重新发明轮子,因此大多数用于Web应用程序的语言都有一套框架,可以为您进行基本的交流,从而使您可以专注于项目的特殊性。Ruby具有ROR,Python具有Django等,Java具有...等。

直到最近,C ++一直没有类似的框架:

  • 一种现代的C ++实现方式是使用CPPCMS之类的东西
  • 还需要努力为Web开发人员设置标准库。在C ++中,其中之一是cpp-netlib
  • 最近,Microsoft发布了名为Casablanca的跨平台REST API C ++ 11库,该库也有帮助。

现在,必须构建Google的“荒谬的C ++”,因为您需要具有非常高性能的模块来解决Google解决的问题。如果没有用专注于性能的语言编写任何模块,尝试做同样的事情,祝您好运。我建议阅读有关此主题的CPPCMS Wiki,以更好地理解。出于历史事实,亚马逊,谷歌,Facebook(请参见Hip Hop和Alexandrescu的最新访谈)和其他一些真正的大型Web服务的确具有C ++内核,这是显而易见的计算原因,比浪费程序员效率的时间更为重要。

CPPCMS和cpp-netlib是开源的,如果您想了解如何使用C ++使应用程序作为Web服务工作,则可以进行研究。也就是说,任何可以侦听端口并将数据发送到端口的应用程序都可以执行此操作,这全都与协议(TCP / IP,HTTP等)有关,而不是代码。


尚不能支持安静,但我已经接受了您的回答。我不知道有类似CPPCMS的东西存在,但是很高兴知道。谢谢!
疯狂科学

1
我了解,与其他相比,这是很新的。以前还存在其他较差的解决方案(根据我的建议),但我认为这种解决方案更适合于语言和问题。
克莱姆

1
C ++确实有这样的框架-以前,Web完全可以与cgi应用程序,MS的ISAPI dll甚至Microsoft的ATLServer一起运行。如今,我们有几个c ++ Web框架,Microsoft正在开发Casablanca,它可以为您提供c ++作为云服务。
gbjbaanb 2012年

应该提到的是,大多数Web应用程序都位于前端服务器后面,并与CGI(在环境中传递数据),stdin和stdout或FCGI(使用套接字和比HTTP更为简单的协议)进行通信。
2013年

3

像其他任何语言一样。

打开一个TCP套接字,发送和接收http消息。解析它们并根据内容进行处理。

在Qt上查看有关支持某些基本http功能的c ++框架的示例。

还有一些专用于C ++的Web框架。AFAIK既不多也没有广泛使用。可能是因为如果您是通过C ++进行网络开发,那么您无论如何都在做非常专业的事情,并且想要对所有内容进行完全控制。


我大概应该能够自己解决这个问题。我所做的唯一Web编程是通过Django,因此所有内容都被抽象了。
疯狂科学

我知道了。Django很不错,但是如果深入研究它,您会发现核心部分不是很棘手。现在,用C ++编写等效的Django,这是一个有趣的挑战。;)
Macke'5

@Macke好吧,我想CPPCMS是一个有趣的挑战,虽然不确定。C ++中缺乏标准的网络无济于事,但是有很多解决方案可以使用它。我猜想C ++的主要问题更多是这样的事实,即不重新启动可执行文件就很难进行更新,而且有时编译时间也很长。CPPCMS对此提供了帮助。
克莱姆

顺便说一句,对于现代,良好的异步联网c ++库,我推荐ASIO库,它是优秀的Boost软件包的一部分。我在其中写了一些简单的TCP / UDP客户端/服务器应用程序,它非常漂亮。
Macke'5

2

从客户端的角度来看,如果您有C / C ++程序,并且想使用它与Internet通讯,则可以使用libcurl。这几乎是一个标准(全面)的库,用于连接到http url以发送和接收数据。还有其他几种库-微软有一些,还有一些开源的。

现在,这是通过HTTP(或SMTP,FTP,或Gopher或.. libcurl非常全面的!)上的普通旧URL的。如果您尝试通过SOAP使用Web服务,则可以使用许多其他库之一,例如gsoap。

对于服务器端,您需要一个公开C ++代码的Web服务器或框架。同样,有很多方法可以做到这一点-最早的Web程序都是C / C ++,编写为CGI程序,其中Web服务器使用IPC形式调用您的应用程序。从那时起,我们有了Wt,Qt,cppCMS,ffead,以及Microsoft的所有产品(ISAPI,ATLServer和现在的Casablanca)。

我认为no-onne真正使用C ++进行Web编程的原因是因为其他语言已预先打包在这些库中。C ++(一如既往)必须找到要使用的库,而PHP可以随时用于网络。


-4

客户端-服务器体系结构可以实现这一目标。

可以使用C ++开发服务器。

在客户端,可以使用Web技术与服务器进行通信。

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.