Como uma interface C ++ com a web (no Google, por exemplo)?

12

O Google é conhecido pela quantidade ridícula de C ++ que eles codificaram ao longo dos anos. Corrija-me se estiver errado, mas grande parte do mecanismo de busca principal do Google está escrita em C ++, não é? Como se pega um programa escrito em C ++ e o interage com um site?

Nota: não estou procurando como o Google em particular faz isso, apenas como isso pode ser feito em geral.

Ciência Maníaca
fonte
Bem, o Google construiu a maior parte de sua aplicação em python e agora o Java também é visto em uso muito. O Google não restringiria o uso de idiomas. Para interface web, soquete é usado. Nada de C ++, mas de C apis. C ++ não tem o seu próprio !!
user1708086

Respostas:

16

Qualquer software da web envia e recebe apenas mensagens por soquetes, só isso. Você pode usar qualquer idioma para fazer isso, não é específico para idiomas.

No entanto, é melhor não reinventar a roda para esse tipo de trabalho, para que a maioria das linguagens usadas para aplicativos da Web tenha seu conjunto de estruturas que faz a comunicação básica para você, para permitir que você se concentre nas especificidades do seu projeto. Ruby tem ROR, Python tem Django e outros, Java como ... etc.

C ++ historicamente não tinha nenhuma estrutura semelhante até recentemente:

  • uma maneira moderna de fazer C ++ é usar algo como CPPCMS ;
  • há também um esforço para configurar uma biblioteca padrão para web dev. em C ++, um deles sendo cpp-netlib ;
  • Recentemente, houve um lançamento de uma biblioteca de API REST de plataforma cruzada para C ++ 11 da Microsoft, chamada Casablanca, que também ajuda;

Agora, a "quantidade ridícula de C ++" que o Google constrói é necessária porque você precisa de módulos de desempenho muito alto para resolver o tipo de problemas que o Google resolve. Boa sorte tentando fazer o mesmo sem nenhum módulo escrito em uma linguagem focada no desempenho. Eu recomendo a leitura do wiki do CPPCMS sobre este assunto para entender melhor. Para fatos históricos, Amazon, Google, Facebook (veja Hip Hop e recentes entrevistas com Alexandrescu) e alguns outros serviços da Web realmente grandes têm núcleos em C ++, por razões computacionais óbvias que são mais importantes que o tempo perdido na produtividade do programador.

Sendo o CPPCMS e o cpp-netlib de código aberto, você pode estudá-los se quiser saber como fazer um aplicativo funcionar como um serviço da Web usando C ++. Dito isso, qualquer aplicativo que possa ouvir portas e enviar dados para porta pode fazer isso potencialmente, é tudo sobre protocolos (TCP / IP, HTTP etc.) , não sobre código.

Klaim
fonte
Ainda não posso votar em silêncio, mas aceitei sua resposta. Eu não sabia que existia o CPPCMS, mas é bom saber. Obrigado!
Maniacal Science
1
Eu entendo, é bem novo comparado aos outros. Outras soluções ruins (no meu próprio conselho) já existiam anteriormente, mas acho que essa é a mais adequada ao idioma e ao problema.
Klaim
1
O C ++ tinha essas estruturas - a Web costumava ser executada inteiramente com aplicativos cgi, dlls ISAPI da MS ou mesmo ATLServer da Microsoft. Atualmente, temos várias estruturas da web em c ++, e a Microsoft está trabalhando em Casablanca, que fornece c ++ como serviços em nuvem.
Gbjbaanb
Deve-se mencionar que a maioria dos aplicativos da Web vive atrás de um servidor front-end e fala com ele CGI, que passa os dados no ambiente, stdin e stdout ou FCGI, que usa soquetes e protocolo um pouco mais simples que o HTTP.
Jan Hudec
3

Como qualquer outro idioma ....

Abra um soquete TCP, envie e receba mensagens http. Analise-os e faça coisas com base no conteúdo.

Veja no Qt um exemplo em uma estrutura c ++ que suporta algumas funcionalidades http básicas.

Também existem estruturas da web dedicadas para C ++. Não são muitos nem amplamente utilizados, AFAIK. Provavelmente porque se você faz web via C ++, está fazendo algo muito especializado de qualquer maneira e deseja controle total sobre tudo.

Macke
fonte
Eu provavelmente deveria ter sido capaz de descobrir isso sozinho. A única programação web que fiz foi através do Django, então tudo foi abstraído.
Maniacal Science
Eu percebi isso. O Django é legal, mas se você se aprofundar, verá que a parte principal não é muito complicada. Agora, escrevendo um equivalente do Django em C ++, há um desafio divertido. ;)
Macke
@ Macke Bem, eu acho que o CPPCMS é um desafio divertido, mas não tenho certeza. A falta de rede padrão em C ++ não ajuda, mas existem inúmeras soluções para trabalhar com ela. O principal problema do C ++, acho, é mais o fato de ser difícil fazer atualizações sem reiniciar o executável, e às vezes também é muito tempo para compilar. CPPCMS ajuda com isso embora.
Klaim
Btw, para uma biblioteca c ++ moderna e boa de rede assíncrona, recomendo a biblioteca ASIO, disponível como parte do excelente pacote Boost. Eu escrevi alguns aplicativos simples de cliente / servidor TCP / UDP, e é muito bonito.
Macke
2

Do ponto de vista do cliente, se você tem um programa C / C ++ e deseja usá-lo para conversar com a Internet, usaria libcurl. É praticamente uma biblioteca padrão (e abrangente) para conectar-se a URLs http para enviar e receber dados. Existem várias outras bibliotecas - a Microsoft possui algumas, existem várias de código aberto.

Agora, isso é para URLs antigas simples sobre http (ou SMTP, FTP ou Gopher, ou ... libcurl é muito abrangente!) Se você estiver tentando consumir serviços da Web sobre SOAP, poderá usar uma de muitas outras bibliotecas, como gsoap.

Para o lado do servidor, você precisa de um servidor da web ou estrutura que exponha seu código C ++. Novamente, existem várias maneiras de fazer isso - os programas Web mais antigos eram todos em C / C ++, escritos como programas CGI, nos quais o servidor Web chamava seu aplicativo usando uma forma de IPC. Desde então, temos Wt, Qt, cppCMS, ffead e todos os da Microsoft (ISAPI, ATLServer e agora Casablanca).

Eu acho que a razão pela qual a on-onne realmente usa C ++ para a programação da Web é porque as outras linguagens vêm pré-empacotadas com essas bibliotecas. Em C ++ (como sempre), você precisa encontrar uma biblioteca para usar, enquanto o PHP vem pronto para usar a web.

gbjbaanb
fonte
-4

A arquitetura cliente-servidor permite que isso aconteça.

C ++ pode ser usado para desenvolver o servidor.

No lado do cliente, as tecnologias da web podem ser usadas para se comunicar com o servidor.

Programador In Paradise
fonte