Comment interfacer le C ++ avec le web (chez Google par exemple)?

12

Google est bien connu pour la quantité ridicule de C ++ qu'ils ont codée au fil des ans. Corrigez-moi si je me trompe, mais une grande partie du moteur de recherche principal de Google est écrit en C ++, n'est-ce pas? Comment prendre un programme écrit en C ++ et l'interfacer avec un site web?

Remarque: je ne cherche pas à savoir comment Google en particulier fait cela, juste comment cela pourrait être fait en général.

Science maniaque
la source
Eh bien, Google a construit la plupart de leurs applications en python et maintenant Java est également très utilisé. Google ne restreindrait pas l'utilisation des langues. Pour l'interface Web, un socket est utilisé. Rien de C ++, mais de C apis. C ++ n'a pas le sien !!
user1708086

Réponses:

16

Tout logiciel Web n'enverra et ne recevra que des messages via des sockets, c'est tout. Vous pouvez utiliser n'importe quelle langue pour ce faire, ce n'est pas spécifique aux langues.

Cependant, vous feriez mieux de ne pas réinventer la roue pour ce genre de travail afin que la plupart des langages utilisés pour faire des applications web aient leur ensemble de framework qui fait la communication de base pour vous, pour vous permettre de vous concentrer sur les spécificités de votre projet. Ruby a ROR, Python a Django et autres, Java comme ... etc.

Historiquement, C ++ n'avait pas de framework similaire jusqu'à récemment:

  • une façon moderne de C ++ de le faire est d'utiliser quelque chose comme CPPCMS ;
  • il y a aussi un effort pour configurer une bibliothèque standard pour le développement web. en C ++, l'un d'eux étant cpp-netlib ;
  • Récemment, il y a eu une version d'une bibliothèque d'API REST multiplateforme pour C ++ 11 de Microsoft appelée Casablanca qui aide également;

Maintenant, la "quantité ridicule de C ++" sur laquelle Google est construit est nécessaire car vous devez disposer de modules très performants pour résoudre le type de problèmes que Google résout. Bonne chance pour essayer de faire la même chose sans aucun module écrit dans un langage axé sur la performance. Je recommande de lire le wiki CPPCMS à ce sujet pour mieux comprendre. Pour des faits historiques, Amazon, Google, Facebook (voir Hip Hop et récentes interviews d'Alexandrescu) et d'autres très gros services Web ont des cœurs en C ++, pour des raisons de calcul évidentes qui sont plus importantes que le temps perdu sur la productivité du programmeur.

CPPCMS et cpp-netlib étant open source, vous pouvez les étudier si vous voulez savoir comment faire fonctionner une application en tant que service web en utilisant C ++. Cela dit, toute application qui peut écouter des ports et envoyer des données vers le port peut potentiellement le faire, il s'agit de protocoles (TCP / IP, HTTP, etc.) , pas de code.

Klaim
la source
Je ne peux pas encore voter tranquillement, mais j'ai accepté votre réponse. Je ne savais pas que quelque chose comme le CPPCMS existait, mais c'est bon à savoir. Merci!
Maniacal Science
1
Je comprends, c'est assez nouveau par rapport aux autres. D'autres solutions médiocres (selon mes propres conseils) existaient auparavant mais je pense que celle-ci est la plus adaptée à la langue et au problème.
Klaim
1
C ++ avait de tels cadres - le Web était auparavant entièrement exécuté avec des applications cgi, ou des DLL ISAPI de MS, ou même ATLServer de Microsoft. De nos jours, nous avons plusieurs frameworks web c ++, et Microsoft travaille sur Casablanca, qui vous offre le c ++ en tant que services cloud.
gbjbaanb
Il convient de mentionner que la plupart des applications Web vivent derrière un serveur frontal et parlent avec lui soit CGI, qui transmet les données dans l'environnement, stdin et stdout ou FCGI, qui utilise des sockets et un protocole quelque peu plus simple que HTTP.
Jan Hudec
3

Comme toute autre langue ....

Ouvrez un socket TCP, envoyez et recevez des messages http. Analysez-les et faites des choses en fonction du contenu.

Regardez Qt pour un exemple sur un framework c ++ qui prend en charge certaines fonctionnalités http de base.

Il existe également des frameworks Web dédiés pour C ++. Pas beaucoup ni largement utilisé, AFAIK. Probablement parce que si vous faites du Web via C ++, vous faites de toute façon quelque chose de très spécialisé et vous voulez un contrôle total sur tout.

Macke
la source
J'aurais probablement dû être en mesure de comprendre cela par moi-même. La seule programmation Web que j'ai faite a été via Django, donc tout a été résumé.
Maniacal Science
Je pensais que. Django est sympa, mais si vous y creusez, vous verrez que la partie centrale n'est pas très délicate. Maintenant, écrire un équivalent Django en C ++, c'est un défi amusant. ;)
Macke
@Macke Eh bien, je suppose que le CPPCMS est un défi amusant, mais je n'en suis pas sûr. L'absence de mise en réseau standard en C ++ n'aide pas, mais il existe des tonnes de solutions pour travailler avec. Le problème principal avec C ++, je suppose, est plus le fait qu'il est difficile de faire des mises à jour sans redémarrer l'exécutable, et qu'il est parfois aussi long de compiler. Le CPPCMS aide à cela cependant.
Klaim
Btw, pour une bonne bibliothèque c ++ de mise en réseau asynchrone, je recommande la bibliothèque ASIO, disponible dans le cadre de l'excellent package Boost. J'ai écrit quelques applications client / serveur TCP / UDP simples, et c'est assez beau.
Macke
2

Du point de vue du client, si vous avez un programme C / C ++ et que vous souhaitez l'utiliser pour parler à Internet, vous utiliserez libcurl. C'est à peu près une bibliothèque standard (et complète) pour se connecter aux URL http pour envoyer et recevoir des données. Il existe plusieurs autres bibliothèques - Microsoft en a quelques-unes, il y en a plusieurs open source.

Maintenant, c'est pour les anciennes URL simples sur http (ou SMTP, ou FTP, ou Gopher, ou .. libcurl est très complet!) Si vous essayez de consommer des services Web sur SOAP, vous pouvez utiliser l'une des nombreuses autres bibliothèques telles que gsoap.

Côté serveur, vous avez besoin d'un serveur Web ou d'une infrastructure qui expose votre code C ++. Encore une fois, il existe de nombreuses façons de le faire - les premiers programmes Web étaient tous en C / C ++, écrits en tant que programmes CGI où le serveur Web appelait votre application à l'aide d'une forme d'IPC. Depuis, nous avons Wt, Qt, cppCMS, ffead et tous ceux de Microsoft (ISAPI, ATLServer, et maintenant Casablanca).

Je pense que la raison pour laquelle personne n'utilise vraiment C ++ pour son progrmaming web est parce que les autres langues sont pré-packagées avec ces bibliothèques. C ++ (comme toujours), vous devez trouver une bibliothèque à utiliser, tandis que PHP est juste prêt à être utilisé pour le Web.

gbjbaanb
la source
-4

L'architecture client-serveur permet cela.

C ++ peut être utilisé pour développer le serveur.

Côté client, les technologies Web peuvent être utilisées pour communiquer avec le serveur.

Programmeur au paradis
la source