Eu gostaria de entrar no desenvolvimento da Web usando C ++ como a "linguagem de script" no lado do servidor. Minha infraestrutura de servidor é baseada em * nix, portanto, o desenvolvimento da Web em C ++ no Azure não é aplicável e o C ++ / CLI ASP.NET também não é aplicável.
Separado dos aplicativos CGI herdados, o desenvolvimento da Web pode ser feito usando C ++?
web-development
c++
Scott Davies
fonte
fonte
,
são.
são redirecionados para um soquete.Respostas:
Absolutamente.
Existem até várias estruturas para desenvolvê-las, incluindo Wt , cppcms , CSP e outras. A implementação da linha principal do FastCGI é em C e suporta diretamente várias linguagens , incluindo C ++.
Qualquer linguagem de programação que possa analisar cadeias de caracteres pode ser usada em CGI ou em um servlet. Qualquer linguagem que possa implementar ligações com bibliotecas C também pode ser usada para desenvolver módulos para servidores compatíveis com ISAPI ou Apache.
Não é particularmente fácil em C ++, e os bons mecanismos de modelagem são poucos e distantes entre si, mas isso pode ser feito.
Obviamente, a questão de saber se é uma boa ideia é outra questão. :)
Observe: sites importantes como Amazon.com, eBay e Google usam C ++ para partes de sua infraestrutura. Perceba, no entanto, que o Google usa apenas C ++ para sistemas de velocidade crítica, e a Amazon.com recentemente se afastou recentemente do Lisp (o que irritou alguns de seus funcionários seniores :).
O Facebook anteriormente compilou o PHP em C ++, mas seu compilador HipHop (escrito em parte em C ++) foi reformulado desde então como uma máquina virtual de bytecode.
fonte
Por que não?
O site de namoro OkCupid é criado com C ++. Provavelmente existem outros exemplos.
Há também um kit de ferramentas inspirado no Qt para desenvolver aplicativos da Web com C ++ chamado Wt .
fonte
Se você planeja escrever seu aplicativo Web em C ++, seria um desperdício total fazer a interface como CGI.
Minha sugestão seria construí-lo assíncrono usando ASIO (E / S assíncrona). Com isso, você pode criar um serviço da Web incrivelmente rápido (combine com o nginx como um servidor de proxy reverso e estático para obter melhores efeitos); Combine isso com a biblioteca de modelos como a Wt e você estará pronto para atender a dezenas de milhares de solicitações por segundo em um único servidor.
Se essa é uma alternativa prática à estrutura da web de linguagem dinâmica é outra questão.
fonte
A resposta curta é: QUALQUER COISA pode ser usada para escrever uma página da Web, desde que seja possível ler a entrada, gravar saída interpretável e ser executável pelo servidor da Web.
Tecnicamente, qualquer idioma pode ser usado como um script CGI, desde que:
Também existem outras maneiras. O Perl pode ser construído como um invólucro em torno do código c / c ++, atuando como uma camada de interpretação entre os dois (e isso não inclui os módulos perl que são compilados como C).
fonte
no começo, era bastante comum - os primeiros sites em que trabalhei no final dos anos 90 foram extensões ISAPI escritas em C ++ e funcionaram muito bem.
fonte
Parece que a Microsoft acha que pode também. Confira Casablanca, que é um novo conjunto de ferramentas (aparentemente) do Azure usando C ++.
fonte
Para PHP, você pode escrever suas próprias extensões C / C ++ e obter bons benefícios de desempenho dessa maneira. Se eu tivesse uma parte realmente intensiva da CPU do meu aplicativo Web, provavelmente criaria uma pequena biblioteca C ++ que transferisse esse processamento para a extensão e depois retornaria o resultado ao PHP e o PHP o enviaria ao navegador.
A outra coisa que as pessoas geralmente não consideram é transferir certos processamentos da CPU para o lado do cliente, por exemplo, JavaScript / jQuery. Se eu tiver um servidor da Web, talvez seja necessário uma CPU de 3Ghz para fazer um processamento intensivo da CPU para uma função específica (talvez algum processamento de dados). Minha empresa está pagando dinheiro por esse servidor todos os meses para mantê-lo funcionando. Se eu quiser expandir as operações para 100 usuários simultâneos executando essa tarefa intensiva de CPU ao mesmo tempo, talvez seja necessário várias CPUs e servidores, aumentando o custo para os meus negócios. Se eu descarregar essa tarefa intensiva da CPU para o lado do cliente, cada usuário que visitar o site poderá fazer seu próprio processamento nos dados e não preciso aumentar a capacidade do servidor, economizando dinheiro.
Afinal de contas, com o poder coletivo de mais de 100 desktops / tablets / celulares fazendo o processamento para você, é muito mais poderoso do que o seu servidor sentado em um datacenter em algum lugar que custa o dinheiro da sua empresa todos os meses para continuar funcionando. Potencialmente, então tudo o que seu servidor faria seria recuperar dados do banco de dados, exibir conteúdo e um pouco de processamento pré / pós e validação dos dados antes de armazenar novamente no banco de dados. Obviamente, você não tornaria o código do lado do cliente muito intensivo da CPU, o que poderia bloquear / congelar a interface do navegador da web, você poderia disparar uma solicitação AJAX para o servidor, recuperar os dados e depois processá-los de forma assíncrona, deixando a web UI do navegador completamente utilizável.
fonte
Sim, pode ser usado. Os outros mencionaram várias abordagens. Aqui está a minha própria abordagem. A vantagem é que é totalmente portátil e independente, todas as bibliotecas selecionadas dependem apenas do ANSI C. A configuração requer apenas o Linux Kernel e um compilador C (e coisas óbvias como Busybox, bash etc.) (ou Windows e um compilador), nenhuma biblioteca extra é necessária, nenhuma instalação grande e sofisticada.
O resultado é um programa único, que é um servidor da Web e um gerador de páginas dinâmico (substitui "apache" e "php"), mas também terá acesso ao banco de dados via sqlite.
Bibliotecas usadas:
createElement
O restante desta resposta é um guia completo de configuração para Linux. O SQlite e o MiniXML são opcionais, mas o guia cobre a instalação completa. Cabe a você comentar as partes não necessárias se estiver interessado em desativar o sqlite ou o MiniXML.
1. Faça o download das 3 bibliotecas
2. Prepare sua pasta
sqlite3.c , sqlite3.h
mongoose.c , mongoose.h
mxml.h
3. Compile mxml
Você deve ter notado que o mxml.c está ausente, porque precisamos criar uma biblioteca estática de mxml. Vá para a pasta em que o mxml tar.gz foi baixado e execute:
Quando a compilação terminar, muitos arquivos serão gerados, o único arquivo de interesse para nós é
libmxml.a
copiá-lo para a pasta principal.3.1 Doublecheck
Verifique se a pasta principal possui o seguinte:
mongoose.c, mongoose.h
libmxml.a, mxml.h
sqlite.c, sqlite.h
4. main.c
Vamos criar o programa atual, criar um
main.c
arquivo na pasta principal, aqui está um esqueleto para você começar.Finalmente, compilando!
Vamos compilar.
cd
para sua pasta principal e execute:Agora, execute server.out com
/server.out
e navegue paralocalhost:8080/hello
Feito :)
fonte
Eu acho que vários sistemas embarcados (por exemplo, roteadores, impressoras, ...) têm algum servidor Web orientado a C ++.
Em particular, você pode usar alguma biblioteca de servidores HTTP como a libonion para adicionar alguns recursos da web a algum programa C ou C ++ ou desenvolver um servidor leve com alguma interface da web.
Algumas pessoas estão codificando seu servidor Web ou sua interface HTTP no Ocaml usando o Ocsigen . Nem toda coisa da web é PHP. E com o FastCGI, você pode realizar um processamento dinâmico da web em / para seu aplicativo.
fonte