Existem desvantagens conceituais na criação de um aplicativo Web com C ++ e MySQL?

10

Eu herdei um projeto bastante interessante, onde há uma boa oportunidade de pegar um software existente e transformá-lo em um aplicativo da web SaaS. Como o projeto é herdado, a base / estrutura de código já está definida como C ++ e MySQL. O aplicativo em si é compilado e executado como um EXE no Windows Server. A interface do usuário é baseada na Web e o aplicativo funciona como um tipo de servidor. Pelo que sei dos aplicativos da web modernos, essa talvez seja uma escolha incomum. Atualmente, a maioria das pessoas parece optar por uma estrutura PHP ou Ruby on Rails. Certamente é essa a impressão que tenho ao ler blogs sobre o assunto. Então, estou muito interessado em saber se um C ++ EXE suportado pelo MySQL é uma base sólida para um aplicativo da Web ou se devemos procurar criar de outra maneira?

jnthnclrk
fonte
O que você descreve parece mais um processo do servidor e não um aplicativo da web. E para processos de servidor, PHP ou RoR são certamente escolhas incomuns. Que tipo de problema você realmente tem?
Benjamin Bannier
O exe talvez use o novo Hostable Web Core ( awesomeideas.net/page/IIS7-Hostable-WebCore.aspx ) ou realmente implemente seu próprio servidor HTTP do zero? Se for o primeiro, então talvez eles estavam realmente tentando fazer um aplicativo muito rápido usando C ++ e auto hospedagem-lo para a portabilidade de máquinas cliente ..
Jimmy Hoffa
É claro que qualquer pessoa sã usaria algo como o Net :: HTTPServer da POCO em vez de escrever um servidor HTTP do zero. Mas não é como o RoR ou, por exemplo, os frameworks Python não contêm um servidor web.
Benjamin Bannier
4
Não é incomum ter o c ++ como back-end de um aplicativo da web. A pesquisa do Google é escrita em c ++. Muitos aplicativos do yahoo são c ++. Praticamente todos os aplicativos web AAA usados ​​por milhões de pessoas são escritos em c ++.
Lord Tydus 08/09/12
Sim, o aplicativo foi projetado como um servidor da web personalizado. Portanto, o lado do aplicativo da Web vem da interface do usuário e do conjunto de recursos do administrador HTML.
Jnthnclrk 9/09/12

Respostas:

20

Não há problema em criar um aplicativo Web usando C ++, se os benefícios superarem o custo, obviamente. Google, Amazon e Facebook são todos criados com C ++ para eficiência em velocidade, memória e energia - também conhecido como custo de servidores.

No entanto, como você adivinhou, existem desvantagens em usar C ++ para isso. Depende de suas ferramentas embora.

Primeiro, deixe-me citar o site cppcms sobre isso:

Quando o CppCMS deve ser usado.

A linguagem C ++ está longe de ser popular no desenvolvimento da Web por muitos motivos: falta de ferramentas apropriadas, habilidades dos desenvolvedores e muito mais.

No entanto, há áreas em que a programação na Web C ++ com CppCMS se torna muito útil e eficiente, e outras em que é apenas uma perda de tempo.

Quando o CppCMS deve ou pode ser usado?

1. Web sites e aplicativos de alta carga, com centenas e milhares de acessos por segundo, onde é necessário alto desempenho, eficiência e escalabilidade.

2. Aplicativo que requer tecnologias escaláveis ​​de Cometa / Servidor Push --- O CppCMS pode manipular com eficiência centenas e milhares de conexões HTTP simultâneas com o uso mínimo de recursos.

3.Interface da web em aplicativos / serviços C ++ existentes com um pequeno custo de biblioteca adicional.

4.Dispositivos com pouca energia incorporados - O CppCMS permite a criação de aplicativos avançados com custo de hardware relativamente baixo e com desempenho razoavelmente rápido.

Quando não usar?

Se você criar pequenos aplicativos da Web que não exijam altas cargas e exijam um período muito curto de comercialização, provavelmente ferramentas como Django ou RoR seriam mais apropriadas para essas tarefas.

As desvantagens específicas do C ++ são:

  • Os tempos de compilação podem ser muito, muito, muito, muito lentos em comparação com outros idiomas. Isso pode afetar as iterações, o intervalo de liberação, mas também a moral do desenvolvedor. Certifique-se de que vale a pena.
  • Na maioria das vezes, você precisa compilar alterações. Pode ser evitado, mas é o habitual.
  • Escrever C ++ moderno facilita (aprender, ler, escrever, depurar etc.), mas muitos desenvolvedores de C ++ não sabem o que é Modern C ++. Portanto, se você trabalha em equipe, precisa ter um bom conhecimento do Modern C ++ de toda a equipe. Caso contrário, você encontrará facilmente bugs muito complicados. Dito isto, é mais um problema das pessoas do que um problema de linguagem. Só que o histórico do C ++ não ajudou a facilitar a compreensão. O bom ensino não é tão comum quanto nas línguas mais modernas (historicamente).
  • O Unicode ainda é pouco suportado pela linguagem C ++ principal, tornando-a uma fonte potencial de grande sofrimento. Basta usar o UTF-8 em todos os lugares e algumas bibliotecas (veja o boost) para gerenciá-lo.
  • O padrão C ++ não sabe o que é uma biblioteca. Portanto, usamos maneiras convencionais de gerenciá-los em diferentes compiladores / vinculadores / sistemas operacionais. Isso pode ser um problema se você começar a entrar no código de plataforma cruzada que precisa carregar / descarregar "on the fly" alguns módulos.

Talvez dê uma olhada no CPPCMS? Ou talvez se você quiser criar um site no estilo GUI?

Verifique também estas perguntas:

Klaim
fonte
3
Meu entendimento é que o Facebook é programado em PHP, mas eles também criaram seu próprio compilador nativo para PHP em C ++ para Linux. As principais razões pelas quais o Facebook desenvolveu o compilador foram reduzir seus custos elétricos para a operação de servidores. Não era realmente a velocidade (é mais rápida), mas o fato de exigir menos uso da CPU por solicitação. É um projeto de código aberto que pode ser encontrado aqui. developers.facebook.com/blog/post/2010/02/02/…
Reactgular
11
Sim, as razões variam, foi por isso que mencionei custos de energia e servidores. Dito isto, Alexandrescu disse recentemente em uma entrevista, acredito, que mais e mais códigos do Facebook são escritos diretamente em C ++, mas ele não mencionou o motivo, se minha memória está correta. Eles também proporcionam uma biblioteca fonte aberto completo de C ++ utilidade / algoritmos: loucura facebook.com/notes/facebook-engineering/...
Klaim
Observe também que, mesmo que o código seja escrito primeiro em PHP e depois convertido em C ++, três das desvantagens que apontei ainda são verdadeiras.
Klaim
2
Outra estrutura da web em C ++: wt (espirituoso). É para pessoas que desejam criar aplicativos da Web que funcionam como aplicativos de desktop ocultos. Para portar, é uma boa escolha.
precisa saber é o seguinte
Eu acho que todos esses sites têm componentes escritos em vários idiomas. O C ++ é provavelmente usado como uma otimização para seções de código que requerem gerenciamento de memória aprimorado.
Jiggy
3

Wordpress rodando em PHP com alguns plugins instalados traz meu servidor Winders de joelhos. Portanto, não tenho problemas com a idéia de implementar um aplicativo Web em C ++. A velocidade é uma parte crítica da experiência na web.

Barracas de design gráfico para impulsionar a maioria dos projetos da web. PHP é uma linguagem de script obscura que roda dentro do HTML. Permitindo que os autores do PHP escapem dentro e fora do HTML. Há muitos benefícios em trabalhar com HTML como resultado.

Ainda assim, você pode implementar qualquer número de soluções de modelo HTML em C ++.

Pode-se fornecer uma longa lista de estruturas Python e PHP que contribuem para o desenvolvimento rápido, mas se você tiver muito tempo, o C ++ é definitivamente possível.

O que eu não entendo é a sua decisão de fazer C ++ no Windows. ri muito

Reactgular
fonte
11
Argumento clássico do homem da palha, existem muitas alternativas rápidas e melhores ao wordpress / php que não são C ++. Não estou dizendo que C ++ não é uma escolha relevante, apenas seu argumento não está realmente muito bem estruturado.
Jimmy Hoffa
Eu concordo com você. Eu não acho que estava tentando fazer do wordpress uma alternativa. Ultimamente, minha experiência tem sido demonstrada recentemente, que é difícil obter um bom desempenho das estruturas populares.
Reactgular
11
StackExchange é executado na estrutura do ASP.NET MVC. O Node.Js é um desempenho de baixo peso e alto desempenho e, se você realmente quer algo de alto desempenho ridículo, existem os frameworks Snap ou Yesod Haskell yesodweb.com/blog/2011/03/… , Haskell, JavaScript e C #, todos com linguagens de alto nível coletadas por lixo.
Jimmy Hoffa
11
Lembre-se de que a velocidade de execução de código no servidor, em muitos casos, não é o fator limitante em um aplicativo Web. Grandes partes do tempo é gasto esperando por algo (banco de dados) ou mesmo na extremidade dianteira (buscar CSS, imagens, fazer as coisas de JavaScript, HTML rendering)
Johannes
1

Certamente é uma escolha incomum. O C ++ não foi projetado com aplicativos da Web em mente e, embora existam bibliotecas para escrever, digamos, aplicativos FastCGI com C ++, você precisa fazer muito mais trabalho para aprimorar seu aplicativo básico. As "linguagens da Web" geralmente fazem muitas coisas que você precisa obter em outros lugares do C ++, como implementar o protocolo HTTP, gerar HTML etc.

Além disso, os aplicativos da Web são principalmente sobre strings, o que não é exatamente o lado mais forte do C ++ - não há nenhum tipo de string embutido na própria linguagem, e isso leva a algumas peculiaridades e torna o processamento de strings mais desajeitado do que seria em idiomas de nível. Manipulação de codificações de caracteres corretamente em bordas C ++ na magia negra. E o C ++ pode travar muito difícil, em código de aparência inocente, o que é muito menos provável com uma linguagem de nível superior (eles também podem travar, mas na maioria dos casos, o servidor da Web pode se recuperar normalmente, especialmente em plataformas que usam um modelo de ciclo de vida de solicitação, como PHP).

Dito isto, se você já possui a maior parte da base de código escrita, o C ++ ainda pode ser uma opção viável. Você precisará encontrar algumas bibliotecas para cobrir todos os tipos de itens da Web (principalmente, você deseja integrar um servidor da Web HTTP independente em seu programa ou conectar-se, por exemplo, ao Apache, por meio do FastCGI ou compilando para um módulo; você também desejará algum tipo de biblioteca de modelos para tornar a renderização de documentos HTML indolor).

Finalmente, há o problema do mercado de desenvolvedores. Existem muitos desenvolvedores de C ++ disponíveis e ainda mais desenvolvedores da Web, mas a sobreposição provavelmente não é tão grande; portanto, se você precisar contratar pessoas para trabalhar nessa questão, terá mais dificuldade do que, digamos, PHP.

tdammers
fonte
1

Como outros já disseram, conceitualmente, o C ++ é um bom ambiente para o desenvolvimento de um servidor web. Existem, no entanto, várias considerações ao tomar essa decisão.

A popularidade das linguagens de script para o design de servidores da web está mudando. Alterações simples podem ser feitas facilmente com a demonstração de resultados quase imediata. Você descobrirá que qualquer bom design de servidor da Web oferecerá recursos semelhantes. De fato, o C ++ é um excelente ambiente para atingir esse objetivo.

A chave para criar um bom sistema de aplicativos para servidores da web é uma separação da interface do usuário do código. Uma meta na criação de um ambiente de aplicativo da web é evitar "Sua interface do usuário está no meu código e seu código está na minha interface do usuário".

Eu gostaria de ter cuidado em sistemas como o cppcms. Eu esperaria que ele oferece algo semelhante.

Você não precisa de uma linguagem de script para oferecer flexibilidade e desempenho.

Bill Door
fonte