Wie verbindet man C ++ mit dem Web (zum Beispiel bei Google)?

12

Google ist bekannt für die lächerliche Menge an C ++, die sie im Laufe der Jahre codiert haben. Korrigieren Sie mich, wenn ich falsch liege, aber ein großer Teil der Kernsuchmaschine von Google ist in C ++ geschrieben, nicht wahr? Wie nimmt man ein in C ++ geschriebenes Programm und verbindet es mit einer Website?

Hinweis: Ich suche nicht nach der Vorgehensweise von Google im Besonderen, sondern nach der Vorgehensweise im Allgemeinen.

Maniacal Science
quelle
Nun, Google hat den größten Teil seiner Anwendung in Python erstellt, und jetzt wird auch Java häufig verwendet. Google würde die Verwendung von Sprachen nicht einschränken. Für die Webschnittstelle werden Sockets verwendet. Nichts von C ++, aber von C apis. C ++ hat keine eigene !!
Benutzer1708086

Antworten:

16

Jede Web-Software sendet und empfängt Nachrichten nur über Sockets, das ist alles. Sie können dazu jede Sprache verwenden, sie ist nicht sprachspezifisch.

Sie sollten das Rad für diese Art von Arbeit jedoch nicht neu erfinden, damit die meisten Sprachen, die für Webanwendungen verwendet werden, über ein Framework verfügen, das die grundlegende Kommunikation für Sie übernimmt, damit Sie sich auf die Besonderheiten Ihres Projekts konzentrieren können. Ruby hat ROR, Python hat Django und andere, Java als ... etc.

C ++ hatte historisch gesehen bis vor kurzem kein ähnliches Framework:

  • Eine moderne C ++ - Methode besteht darin, so etwas wie CPPCMS zu verwenden .
  • Es wird auch versucht, eine Standardbibliothek für Webentwickler einzurichten. in C ++ ist eine davon cpp-netlib ;
  • Vor kurzem wurde eine plattformübergreifende REST-API-Bibliothek für C ++ 11 von Microsoft namens Casablanca veröffentlicht, die ebenfalls hilfreich ist.

Jetzt ist die "lächerliche Menge an C ++", über die Google aufgebaut ist, notwendig, da Sie sehr leistungsstarke Module benötigen, um die Art von Problemen zu lösen, die Google löst. Viel Glück beim Versuch, dasselbe zu tun, ohne dass ein Modul in einer auf Leistung ausgerichteten Sprache geschrieben ist. Ich empfehle, das CPPCMS-Wiki zu diesem Thema zu lesen, um es besser zu verstehen. Aus historischen Gründen haben Amazon, Google, Facebook (siehe Hip Hop und die jüngsten Interviews mit Alexandrescu) und einige andere wirklich große Webdienste Kerne in C ++, und zwar aus offensichtlichen rechnerischen Gründen, die wichtiger sind als der Zeitverlust für die Produktivität der Programmierer.

CPPCMS und cpp-netlib sind Open Source. Sie können sie studieren, wenn Sie wissen möchten, wie eine Anwendung mit C ++ als Webdienst funktioniert. Das heißt, jede Anwendung, die Ports abhören und Daten an den Port senden kann, kann dies möglicherweise. Es geht nur um Protokolle (TCP / IP, HTTP usw.) , nicht um Code.

Klaim
quelle
Ich kann noch nicht ruhig stimmen, aber ich habe Ihre Antwort akzeptiert. Ich wusste nicht, dass es so etwas wie CPPCMS gibt, aber es ist gut zu wissen. Vielen Dank!
Maniacal Science
1
Ich verstehe, es ist ziemlich neu im Vergleich zu den anderen. Andere schlechte (nach meinem eigenen Rat) Lösungen gab es früher, aber ich denke, diese ist besser für die Sprache und das Problem geeignet.
Klaim
1
C ++ hatte solche Frameworks - das Web wurde früher ausschließlich mit CGI-Apps, den ISAPI-DLLs von MS oder sogar dem ATLServer von Microsoft ausgeführt. Heutzutage haben wir mehrere C ++ - Webframeworks, und Microsoft arbeitet an Casablanca, mit dem Sie C ++ als Cloud-Dienste erhalten.
Gbjbaanb
Es sollte erwähnt werden, dass die meisten Webanwendungen hinter einem Front-End-Server leben und entweder mit CGI kommunizieren, das die Daten in Umgebung, stdin und stdout weitergibt, oder mit FCGI, das Sockets und ein etwas einfacheres Protokoll als HTTP verwendet.
Jan Hudec
3

Wie jede andere Sprache ....

Öffnen Sie einen TCP-Socket, senden und empfangen Sie http-Nachrichten. Analysiere sie und mache Sachen basierend auf Inhalten.

In Qt finden Sie ein Beispiel für ein C ++ - Framework, das einige grundlegende http-Funktionen unterstützt.

Es gibt auch spezielle Webframeworks für C ++. Nicht viele noch weit verbreitet, AFAIK. Wahrscheinlich, weil Sie, wenn Sie über C ++ im Internet arbeiten, sowieso etwas sehr Spezialisiertes tun und die volle Kontrolle über alles haben möchten.

Macke
quelle
Ich hätte das wahrscheinlich selbst herausfinden sollen. Die einzige Webprogrammierung, die ich gemacht habe, war über Django, also wurde alles weg abstrahiert.
Maniacal Science
Ich dachte mir, dass. Django ist nett, aber wenn Sie sich damit beschäftigen, werden Sie feststellen, dass der Kernteil nicht sehr schwierig ist. Wenn Sie jetzt ein Django-Äquivalent in C ++ schreiben, gibt es eine lustige Herausforderung. ;)
Macke
@ Macke Nun, ich denke, CPPCMS ist eine lustige Herausforderung, aber nicht sicher. Das Fehlen von Standardnetzwerken in C ++ hilft nicht weiter, aber es gibt unzählige Lösungen, um damit zu arbeiten. Das Hauptproblem bei C ++ ist wohl eher die Tatsache, dass es schwierig ist, Updates durchzuführen, ohne die ausführbare Datei neu zu starten, und dass das Kompilieren manchmal auch so lang ist. CPPCMS hilft dabei.
Klaim
Übrigens empfehle ich für eine moderne, gute asynchrone C ++ - Netzwerkbibliothek die ASIO-Bibliothek, die als Teil des hervorragenden Boost-Pakets verfügbar ist. Ich habe einige einfache TCP / UDP-Client / Server-Apps darin geschrieben, und es ist ziemlich schön.
Macke
2

Wenn Sie aus Client-Sicht ein C / C ++ - Programm haben und es verwenden möchten, um mit dem Internet zu kommunizieren, verwenden Sie libcurl. Es ist so ziemlich eine Standardbibliothek (und eine umfassende Bibliothek), um eine Verbindung zu http-URLs herzustellen und Daten zu senden und zu empfangen. Es gibt mehrere andere Bibliotheken - Microsoft hat einige, es gibt mehrere Open Source-Bibliotheken.

Dies gilt für einfache alte URLs über http (oder SMTP oder FTP oder Gopher oder .. libcurl ist sehr umfassend!). Wenn Sie versuchen, Webdienste über SOAP zu nutzen, können Sie eine von vielen anderen Bibliotheken wie z gsoap.

Für die Serverseite benötigen Sie einen Webserver oder ein Framework, das Ihren C ++ - Code verfügbar macht. Auch hier gibt es viele Möglichkeiten - die frühesten Webprogramme waren alle C / C ++, geschrieben als CGI-Programme, bei denen der Webserver Ihre App mithilfe einer IPC-Form aufrief. Seitdem haben wir Wt, Qt, cppCMS, ffead und alle von Microsoft (ISAPI, ATLServer und jetzt Casablanca).

Ich denke, der Grund, warum no-onne C ++ wirklich für sein Web-Programm verwendet, ist, dass die anderen Sprachen mit diesen Bibliotheken vorinstalliert sind. In C ++ (wie immer) müssen Sie eine Bibliothek suchen, die Sie verwenden können, während PHP nur für das Web bereit ist.

gbjbaanb
quelle
-4

Die Client-Server-Architektur ermöglicht dies.

C ++ kann verwendet werden, um den Server zu entwickeln.

Auf der Clientseite können Webtechnologien verwendet werden, um mit dem Server zu kommunizieren.

Programmierer im Paradies
quelle