Y a-t-il des inconvénients conceptuels à créer une application web avec C ++ et MySQL?

10

J'ai hérité d'un projet assez intéressant où il y a une bonne opportunité de prendre un logiciel existant et de le transformer en application web SaaS. Comme le projet est hérité, la base / framework de code est déjà défini comme C ++ et MySQL. L'application elle-même est compilée et exécutée en tant qu'EXE sur Windows Server. L'interface utilisateur est basée sur le Web et l'application fonctionne comme une sorte de serveur. D'après ce que je sais des applications Web modernes, c'est peut-être un choix inhabituel. De nos jours, la plupart des gens semblent opter pour un framework PHP ou Ruby on Rails. C'est certainement l'impression que j'ai en lisant des blogs sur le sujet. Donc, je suis très intéressé de savoir si un EXE C ++ soutenu par MySQL est une base solide pour une application Web, ou si nous devrions chercher à construire d'une autre manière?

jnthnclrk
la source
Ce que vous décrivez ressemble plus à un processus serveur qu'à une application Web. Et pour les processus serveur, PHP ou RoR sont certainement des choix inhabituels. Quel genre de problème avez-vous réellement?
Benjamin Bannier
L'exe utilise-t-il peut-être le nouveau Hostable Web Core ( awesomeideas.net/page/IIS7-Hostable-WebCore.aspx ) ou implémente-t-il réellement son propre serveur HTTP à partir de zéro? Si le premier, alors peut-être qu'ils essayaient vraiment de faire une application très rapide en utilisant C ++ et en l'auto-hébergeant pour la portabilité sur les machines clientes.
Jimmy Hoffa
Bien sûr, toute personne sensée utiliserait quelque chose comme Net :: HTTPServer de POCO au lieu d'écrire un serveur HTTP à partir de zéro. Mais ce n'est pas comme RoR ou par exemple les frameworks Python n'emballent pas de serveur web.
Benjamin Bannier
4
Ce n'est pas si rare d'avoir c ++ comme backend d'une application web. La recherche Google est écrite en c ++. De nombreuses applications de Yahoo sont en C ++. Presque toutes les applications Web AAA utilisées par des millions de personnes sont écrites en c ++.
Lord Tydus, le
Oui, l'application a été conçue comme un serveur Web personnalisé. Ainsi, le côté application Web provient de l'interface utilisateur HTML et de l'ensemble de fonctionnalités.
jnthnclrk

Réponses:

20

Il est normal de créer une application Web en C ++ SI les avantages l'emportent évidemment sur le coût. Google, Amazon, Facebook sont tous construits avec C ++ pour une efficacité en termes de vitesse, de mémoire et d'énergie - c'est-à-dire les coûts des serveurs.

Cependant, comme vous l'avez deviné, il y a des inconvénients à utiliser C ++ pour cela. Cela dépend de vos outils.

Permettez-moi d'abord de citer le site Web de cppcms à ce sujet:

Quand CppCMS doit être utilisé.

Le langage C ++ est loin d'être populaire pour le développement Web pour de nombreuses raisons: manque d'outils appropriés, compétences des développeurs et bien d'autres.

Cependant, il existe des domaines où la programmation Web C ++ avec CppCMS devient très utile et efficace, et certains où ce n'est qu'une perte de temps.

Quand CppCMS doit ou peut être utilisé?

1. Sites Web et applications à haute charge avec des centaines et des milliers de visites par seconde, où des performances, une efficacité et une évolutivité élevées sont requises.

2.Application qui nécessite des technologies Comet / Server Push évolutives --- CppCMS peut gérer efficacement des centaines et des milliers de connexions HTTP simultanées avec une utilisation minimale des ressources.

3.Intégration de l'interface Web dans des applications / services C ++ existants avec un petit coût de bibliothèque supplémentaire.

4.Périphériques sous-alimentés intégrés - CppCMS permet la création d'applications riches avec un coût relativement faible de matériel qui fonctionnerait assez rapidement.

Quand ne pas utiliser?

Si vous créez de petites applications Web qui ne nécessitent pas de charges élevées et nécessitent un délai de commercialisation très court, des outils tels que Django ou RoR seraient probablement plus appropriés pour de telles tâches.

Les inconvénients spécifiques au C ++ sont:

  • Les temps de compilation peuvent être très très très très lents par rapport à d'autres langues. Cela peut avoir un impact sur les itérations, l'intervalle de publication mais également sur la morale du développeur. Assurez-vous que cela en vaut la peine.
  • La plupart du temps, vous devez compiler les modifications. Cela peut être évité mais c'est l'habituel.
  • L'écriture de C ++ moderne facilite (apprendre, lire, écrire, déboguer, etc.), mais beaucoup de développeurs C ++ ne savent pas ce qu'est le C ++ moderne. Donc, si vous travaillez en équipe, vous devez avoir une bonne connaissance de Modern C ++ de toute l'équipe. Sinon, vous entrerez facilement dans des bugs très compliqués. Cela dit, c'est plus un problème de personnes qu'un problème de langue. C'est juste que l'historique C ++ n'a pas aidé à le rendre facile à saisir. Un bon enseignement n'est pas aussi courant que dans les langues plus modernes (historiquement).
  • Unicode est encore mal pris en charge par le langage C ++ de base, ce qui en fait une source potentielle de grande douleur. Utilisez simplement UTF-8 partout et certaines bibliothèques (regardez dans boost) pour le gérer.
  • La norme C ++ ne sait pas ce qu'est une bibliothèque. Nous utilisons donc des moyens conventionnels pour les gérer sur différents compilateurs / éditeur de liens / OS. Cela pourrait être un problème si vous commencez à entrer dans du code multiplateforme qui doit charger / décharger "à la volée" certains modules.

Peut-être jetez un oeil à CPPCMS? Ou peut-être si vous voulez créer un site Web de style GUI?

Vérifiez également ces questions:

Klaim
la source
3
Ma compréhension est que Facebook est programmé en PHP, mais ils ont également construit leur propre compilateur natif pour PHP en C ++ pour Linux. Facebook a principalement développé le compilateur pour réduire ses coûts électriques d'exploitation des serveurs. Ce n'était pas vraiment de la vitesse (c'est plus rapide) mais le fait qu'il nécessite moins d'utilisation du CPU par requête. C'est un projet open source qui peut être trouvé ici. developers.facebook.com/blog/post/2010/02/02/…
Reactgular
1
Oui, les raisons varient, c'est pourquoi j'ai mentionné le coût de l'énergie et des serveurs. Cela dit, Alexandrescu a déclaré récemment dans une interview, je crois, que de plus en plus de code Facebook est écrit directement en C ++, mais il n'a pas expliqué pourquoi, si ma mémoire est correcte. Ils fournissent également une bibliothèque open source pleine d'utilitaires / algorithmes C ++: Folly facebook.com/notes/facebook-engineering/…
Klaim
Notez également que même si le code est d'abord écrit en PHP puis converti en C ++, 3 des inconvénients que j'ai signalés sont toujours vrais.
Klaim
2
Un autre framework web C ++: wt (witty). Il est destiné aux personnes qui souhaitent créer des applications Web qui fonctionnent comme des applications de bureau sous le capot. Pour le portage, c'est un bon choix.
K.Steff
Je pense que tous ces sites ont des composants écrits en plusieurs langues. C ++ est très probablement utilisé comme optimisation pour les sections de code qui nécessitent une gestion de la mémoire affinée.
jiggy
3

Wordpress fonctionnant en PHP avec quelques plugins installés met mon serveur Winders à genoux. Je n'ai donc aucun problème avec l'idée d'implémenter une application web en C ++. La vitesse est un élément essentiel de l'expérience Web.

Tentes de conception graphique pour piloter la majorité des projets web. PHP est un langage de script obscur qui s'exécute à l'intérieur de HTML. Permettre aux auteurs PHP de s'échapper dans et hors de HTML. En conséquence, l'utilisation de HTML présente de nombreux avantages.

Pourtant, vous pouvez implémenter n'importe quel nombre de solutions de modèles HTML en C ++.

On pourrait vous fournir une longue liste de frameworks Python et PHP qui permettent un développement rapide, mais si vous avez beaucoup de temps, alors C ++ est certainement possible.

Ce que je ne comprends pas, c'est votre décision de faire du C ++ sur Windows. lol

Reactgular
la source
1
Argument classique de l'homme de paille, il existe de nombreuses meilleures alternatives rapides à wordpress / php qui ne sont pas C ++. Je ne dis pas que le C ++ n'est pas un choix pertinent, juste votre argument n'est pas vraiment très bien cadré.
Jimmy Hoffa
Je suis d'accord avec toi. Je ne pense pas que j'essayais de faire de wordpress une alternative. C'est juste que mon expérience a été récente, comme l'a montré qu'il est difficile d'obtenir de bonnes performances avec les frameworks populaires.
Reactgular
1
StackExchange s'exécute sur le framework ASP.NET MVC. Node.Js est de hautes performances de faible poids et si vous voulez vraiment quelque chose de ridiculement performant, il y a les frameworks Snap ou Yesod Haskell yesodweb.com/blog/2011/03/… , Haskell, JavaScript et C # étant tous des langages de collecte de déchets de haut niveau.
Jimmy Hoffa
1
Gardez à l'esprit que la vitesse d'exécution du code sur le serveur dans de nombreux cas n'est pas le facteur limitant dans une application Web. Une grande partie du temps est passée à attendre quelque chose (base de données) ou même à l'avant (récupération de CSS, images, faire des choses JavaScript, rendu HTML)
johannes
1

C'est certainement un choix inhabituel. C ++ n'a pas été conçu pour les applications Web, et bien qu'il existe des bibliothèques pour écrire, par exemple, des applications FastCGI avec C ++, vous devez faire beaucoup plus de travail pour obtenir votre application de base. Les "langages Web" font généralement beaucoup de choses pour vous que vous devez obtenir ailleurs en C ++, telles que la mise en œuvre du protocole HTTP, la génération de HTML, etc.

De plus, les applications Web concernent principalement les chaînes, ce qui n'est pas exactement le côté le plus fort de C ++ - il n'y a pas de type de chaîne intégré dans le langage lui-même, ce qui conduit à quelques bizarreries et rend le traitement des chaînes plus maladroit qu'il ne le serait en plus haut - langues de niveau. La gestion correcte des encodages de caractères en C ++ limite la magie noire. Et C ++ peut planter très fort, sur du code d'aspect assez innocent, ce qui est beaucoup moins probable avec un langage de niveau supérieur (eux aussi peuvent planter, mais dans la plupart des cas, le serveur Web peut récupérer gracieusement, en particulier sur les plates-formes qui utilisent un par modèle de cycle de vie de demande, comme PHP).

Cela dit, si vous avez déjà écrit la majeure partie de la base de code, C ++ pourrait toujours être un choix viable. Vous devrez trouver des bibliothèques pour couvrir toutes sortes de choses sur le Web (notamment, vous voulez être en mesure d'intégrer un serveur Web HTTP autonome dans votre programme, ou de vous connecter, par exemple, à Apache, soit via FastCGI, soit en compilant avec un module; vous voudrez également une sorte de bibliothèque de modèles pour rendre le rendu des documents HTML indolore).

Enfin, il y a le problème du marché des développeurs. Il y a beaucoup de développeurs C ++ disponibles, et encore plus de développeurs web, mais le chevauchement n'est probablement pas si important, donc si jamais vous avez besoin d'embaucher des gens pour travailler sur cette chose, vous aurez un moment un peu plus difficile qu'avec, disons, PHP.

tdammers
la source
1

Comme d'autres l'ont dit, conceptuellement, C ++ est un bon environnement pour le développement d'un serveur Web. Il y a cependant plusieurs considérations lorsque vous prenez cette décision.

La popularité des langages de script pour la conception de serveurs Web évolue dans le temps. Des changements simples peuvent être effectués facilement avec la démonstration de résultats presque immédiats. Vous constaterez que toute bonne conception de serveur Web offrira des capacités similaires. En effet, C ++ est un excellent environnement pour atteindre cet objectif.

La clé de la construction d'un bon système d'application de serveur Web est une séparation de l'interface utilisateur du code. Un objectif dans la construction d'un environnement d'application Web est d'éviter "Votre interface utilisateur est dans mon code et votre code est dans mon interface utilisateur."

Je voudrais soigneusement à des systèmes comme cppcms. Je m'attendrais à ce qu'il offre quelque chose de similaire.

Vous n'avez pas besoin d'un langage de script pour offrir flexibilité et performances.

Bill Door
la source