¿Cómo interactúa C ++ con la web (en Google, por ejemplo)?

12

Google es bien conocido por la ridícula cantidad de C ++ que han codificado a lo largo de los años. Corrígeme si me equivoco, pero una gran parte del motor de búsqueda principal de Google está escrito en C ++, ¿no? ¿Cómo se toma un programa escrito en C ++ y se conecta con un sitio web?

Nota: No estoy buscando cómo Google en particular hace esto, sino cómo se podría hacer en general.

Ciencia maniaca
fuente
Bueno, Google ha construido la mayoría de sus aplicaciones en python y ahora también se ve que Java se usa mucho. Google no restringiría el uso de idiomas. Para la interfaz web, se utilizan zócalos. Nada de C ++, sino de C apis. ¡C ++ no tiene el suyo!
user1708086

Respuestas:

16

Cualquier software web solo enviará y recibirá mensajes a través de sockets, eso es todo. Puede usar cualquier idioma para hacer esto, no es específico de los idiomas.

Sin embargo, es mejor que no reinvente la rueda para este tipo de trabajo, ya que la mayoría de los lenguajes que se utilizan para hacer aplicaciones web tienen su conjunto de marcos que hace la comunicación básica para usted, para permitirle concentrarse en las especificidades de su proyecto. Ruby tiene ROR, Python tiene Django y otros, Java como ... etc.

C ++ históricamente no tenía un marco similar hasta hace poco:

  • una forma moderna de hacerlo en C ++ es usar algo como CPPCMS ;
  • También hay un esfuerzo por configurar una biblioteca estándar para desarrolladores web. en C ++, uno de ellos es cpp-netlib ;
  • Recientemente se ha lanzado una biblioteca REST API multiplataforma para C ++ 11 de Microsoft llamada Casablanca que también ayuda;

Ahora, la "cantidad ridícula de C ++" sobre la que se construye Google es necesaria porque necesita tener módulos de muy alto rendimiento para resolver el tipo de problemas que Google resuelve. Buena suerte tratando de hacer lo mismo sin ningún módulo escrito en un lenguaje centrado en el rendimiento. Recomiendo leer el wiki de CPPCMS sobre este tema para comprenderlo mejor. Para hechos históricos, Amazon, Google, Facebook (ver Hip Hop y entrevistas recientes de Alexandrescu) y algunos otros servicios web realmente grandes tienen núcleos en C ++, por obvias razones computacionales que son más importantes que el tiempo perdido en la productividad del programador.

CPPCMS y cpp-netlib son de código abierto, puede estudiarlos si desea saber cómo hacer que una aplicación funcione como un servicio web utilizando C ++. Dicho esto, cualquier aplicación que pueda escuchar puertos y enviar datos al puerto puede hacer esto, se trata de protocolos (TCP / IP, HTTP, etc.) , no de código.

Klaim
fuente
No puedo votar en silencio todavía, pero acepté tu respuesta. No sabía que existía algo así como CPPCMS, pero es bueno saberlo. ¡Gracias!
Maniacal Science
1
Entiendo, es bastante nuevo en comparación con los demás. Otras soluciones pobres (en mi propio consejo) existían anteriormente, pero creo que esta es la más adecuada para el idioma y el problema.
Klaim
1
C ++ tenía tales marcos: la web solía ejecutarse completamente con aplicaciones cgi, o los dlls ISAPI de MS, o incluso el ATLServer de Microsoft. Hoy en día, tenemos varios marcos web de c ++, y Microsoft está trabajando en Casablanca, que le ofrece c ++ como servicios en la nube.
gbjbaanb
Cabe mencionar que la mayoría de las aplicaciones web viven detrás de un servidor front-end y hablan con él, ya sea CGI, que pasa los datos en el entorno, stdin y stdout o FCGI, que usa sockets y un protocolo algo más simple que HTTP.
Jan Hudec
3

Como cualquier otro idioma ...

Abra un socket TCP, envíe y reciba mensajes http. Analízalos y haz cosas basadas en el contenido.

Mire Qt para ver un ejemplo en un marco de trabajo de c ++ que admite algunas funciones básicas de http.

También hay marcos web dedicados para C ++. No muchos ni ampliamente utilizados, AFAIK. Probablemente porque si haces web a través de C ++, estás haciendo algo muy especializado de todos modos y quieres un control total sobre todo.

Macke
fuente
Probablemente debería haber sido capaz de resolver esto por mí mismo. La única programación web que he hecho ha sido a través de Django, por lo que todo fue abstraído.
Maniacal Science
Lo imaginé. Django es agradable, pero si profundizas en él, verás que la parte central no es muy complicada. Ahora, al escribir un equivalente de Django en C ++, hay un desafío divertido. ;)
Macke
@Macke Bueno, supongo que CPPCMS es un desafío divertido, aunque no estoy seguro. La falta de redes estándar en C ++ no ayuda, pero hay toneladas de soluciones para trabajar con ellas. Supongo que el principal problema con C ++ es más el hecho de que es difícil hacer actualizaciones sin reiniciar el ejecutable, y a veces también es tan largo compilar. Sin embargo, CPPCMS ayuda con eso.
Klaim
Por cierto, para una biblioteca c ++ de red asíncrona moderna y buena, recomiendo la biblioteca ASIO, disponible como parte del excelente paquete Boost. He escrito algunas aplicaciones simples de cliente / servidor TCP / UDP en él, y es bastante hermoso.
Macke
2

Desde la perspectiva del cliente, si tiene un programa C / C ++ y desea usarlo para hablar con Internet, usaría libcurl. Es más o menos una biblioteca estándar (y completa) para conectarse a direcciones URL http para enviar y recibir datos. Hay varias otras bibliotecas: Microsoft tiene algunas, hay varias de código abierto.

Ahora eso es para las URL antiguas y simples sobre http (o SMTP, o FTP, o Gopher, o ... ¡libcurl es muy completo!) Si está tratando de consumir servicios web a través de SOAP, puede usar una de muchas otras bibliotecas como gsoap

Para el lado del servidor, necesita un servidor web o marco que exponga su código C ++. Nuevamente, hay muchas maneras de hacer esto: los primeros programas web fueron todos C / C ++, escritos como programas CGI donde el servidor web llamó a su aplicación usando una forma de IPC. Desde entonces, tenemos Wt, Qt, cppCMS, ffead y todos los de Microsoft (ISAPI, ATLServer y ahora Casablanca).

Creo que la razón por la que no-onne realmente usa C ++ para su programación web es porque los otros idiomas vienen preempaquetados con estas bibliotecas. C ++ (como siempre) tienes que buscar una biblioteca para usar, mientras que PHP solo viene listo para la web.

gbjbaanb
fuente
-4

La arquitectura cliente-servidor permite que esto suceda.

C ++ puede usarse para desarrollar el servidor.

Del lado del cliente, las tecnologías web pueden usarse para comunicarse con el servidor.

Programador en el paraíso
fuente