Ci sono degli svantaggi concettuali nella creazione di un'app Web con C ++ e MySQL?


10

Ho ereditato un progetto piuttosto interessante in cui esiste una buona opportunità di prendere un software esistente e trasformarlo in un'app Web SaaS. Man mano che il progetto viene ereditato, il code base / framework è già definito come C ++ e MySQL. L'app stessa viene compilata ed eseguita come EXE su Windows Server. L'interfaccia utente è basata sul Web e l'app funziona come un tipo di server. Da quello che so delle moderne app Web, questa è forse una scelta insolita. Al giorno d'oggi, molte persone sembrano optare per un framework PHP o Ruby on Rails. Certamente questa è l'impressione che ottengo leggendo blog sull'argomento. Quindi, sono molto interessato a sapere se un EXE C ++ supportato da MySQL è una solida base per un'app Web o se dovremmo cercare di costruire in un altro modo?


Quello che descrivi sembra più un processo server e non una webapp. E per i processi server PHP o RoR sono certamente scelte insolite. Che tipo di problema hai effettivamente?
Benjamin Bannier,

L'exe utilizza forse il nuovo Hostable Web Core ( awesomeideas.net/page/IIS7-Hostable-WebCore.aspx ) o implementa effettivamente il proprio server HTTP da zero? Se il primo, allora forse stavano davvero cercando di creare un'app molto veloce usando C ++ e self-hosting per la portabilità sui computer client ..
Jimmy Hoffa,

Ovviamente chiunque sia sano di mente userebbe qualcosa come Net :: HTTPServer di POCO invece di scrivere un server HTTP da zero. Ma non è come RoR o ad esempio i framework Python non racchiudono un server web.
Benjamin Bannier,

4
Non è insolito avere c ++ come backend di un'applicazione web. La ricerca di Google è scritta in c ++. Molte app di yahoo sono c ++. Praticamente ogni app Web AAA utilizzata da milioni di persone è scritta in c ++.
Lord Tydus,

Sì, l'app è stata progettata come un server Web personalizzato. Quindi il lato dell'app Web proviene dall'interfaccia utente e dal set di funzioni dell'amministratore HTML.
jnthnclrk,

Risposte:


20

È OK creare un'applicazione Web usando C ++ SE i benefici superano i costi, ovviamente. Google, Amazon, Facebook sono tutti realizzati con C ++ per efficienza in termini di velocità, memoria ed energia, ovvero i costi dei server.

Tuttavia, come hai indovinato, ci sono degli svantaggi nell'utilizzo di C ++ per questo. Tuttavia dipende dai tuoi strumenti.

Prima di tutto, lasciatemi citare il sito Web cppcms su questo:

Quando usare CppCMS.

Il linguaggio C ++ è lungi dall'essere popolare per lo sviluppo Web per molte ragioni: mancanza di strumenti adeguati, competenze degli sviluppatori e molti altri.

Tuttavia, ci sono aree in cui la programmazione web C ++ con CppCMS diventa molto utile ed efficiente e alcune in cui è solo una perdita di tempo.

Quando CppCMS dovrebbe o può essere utilizzato?

1. Siti web e applicazioni ad alto carico con centinaia e migliaia di hit al secondo, dove sono richieste alte prestazioni, efficienza e scalabilità.

2.Applicazioni che richiedono tecnologie push Comet / Server scalabili --- CppCMS può gestire in modo efficiente centinaia e migliaia di connessioni HTTP simultanee con un utilizzo minimo delle risorse.

3.Integrazione dell'interfaccia Web in applicazioni / servizi C ++ esistenti con un piccolo costo di libreria aggiuntiva.

4. Dispositivi non alimentati integrati - CppCMS consente la creazione di applicazioni avanzate con un costo dell'hardware relativamente basso che si comporterebbe in modo ragionevolmente veloce.

Quando non usare?

Se si creano piccole applicazioni Web che non richiedono carichi elevati e richiedono un periodo di time-to-market molto breve, probabilmente strumenti come Django o RoR sarebbero più appropriati per tali attività.

Gli svantaggi specifici del C ++ sono:

  • I tempi di compilazione possono essere molto, molto, molto lenti rispetto ad altre lingue. Ciò potrebbe influire sulle iterazioni, sull'intervallo di rilascio ma anche sulla morale dello sviluppatore. Assicurati che ne valga la pena.
  • Il più delle volte, è necessario compilare le modifiche. Può essere evitato ma è il solito.
  • Scrivere C ++ moderno rende facile (imparare, leggere, scrivere, eseguire il debug, ecc.), Ma molti sviluppatori C ++ non sanno cos'è il C ++ moderno. Quindi, se lavori in team, devi avere una buona conoscenza di Modern C ++ da tutto il team. Altrimenti, ti imbatterai facilmente in bug molto complicati. Detto questo, è più un problema di persone che un problema di lingua. È solo che la storia di C ++ non ha contribuito a renderlo facile da comprendere. Un buon insegnamento non è così comune come nelle lingue più moderne (storicamente).
  • Unicode è ancora scarsamente supportato dal linguaggio C ++ di base, rendendolo una potenziale fonte di grande dolore. Usa UTF-8 ovunque e alcune librerie (cerca in boost) per gestirlo.
  • Lo standard C ++ non sa cosa sia una libreria. Quindi usiamo metodi convenzionali per gestirli su diversi compilatori / linker / SO. Questo potrebbe essere un problema se inizi a entrare nel codice multipiattaforma che deve caricare / scaricare "al volo" alcuni moduli.

Forse dai un'occhiata a CPPCMS? O forse se vuoi creare un sito Web in stile GUI?

Controlla anche queste domande:


3
La mia comprensione è che Facebook è programmato in PHP, ma hanno anche creato il proprio compilatore nativo per PHP in C ++ per Linux. Il motivo principale per cui Facebook ha sviluppato il compilatore è stato quello di ridurre i costi elettrici per i server operativi. Non era davvero la velocità (è più veloce) ma il fatto che richiede meno utilizzo della CPU per richiesta. È un progetto open source che può essere trovato qui. developers.facebook.com/blog/post/2010/02/02/…
Reactgular

1
Sì, le ragioni variano, ecco perché ho citato i costi di energia e server. Detto questo, Alexandrescu ha detto di recente in un'intervista, credo, che sempre più codice Facebook è scritto direttamente in C ++, ma non ha menzionato il perché, se la mia memoria è corretta. Forniscono anche una libreria open source piena di utilità / algoritmi C ++: Folly facebook.com/notes/facebook-engineering/…
Klaim

Inoltre, anche se il codice è stato prima scritto in PHP e poi convertito in C ++, 3 degli svantaggi che ho indicato sono ancora veri.
Klaim

2
Un altro framework Web C ++: wt (spiritoso). È per le persone che vogliono creare app Web che funzionano come app desktop sotto il cofano. Per il porting, è una buona scelta.
K.Steff,

Penso che tutti questi siti abbiano componenti scritti in più lingue. Molto probabilmente il C ++ viene utilizzato come ottimizzazione per sezioni di codice che richiedono una gestione della memoria perfezionata.
jiggy,

3

Wordpress in esecuzione in PHP con alcuni plugin installati mette il mio server Winders in ginocchio. Quindi non ho alcun problema con l'idea di implementare un'applicazione web in C ++. La velocità è una parte fondamentale dell'esperienza web.

Tende di design grafico per guidare la maggior parte dei progetti web. PHP è un oscuro linguaggio di scripting che scorre all'interno di HTML. Consentire agli autori di PHP di uscire e uscire dall'HTML. Di conseguenza, ci sono molti vantaggi nel lavorare con HTML.

Tuttavia, è possibile implementare qualsiasi numero di soluzioni di template HTML in C ++.

Si potrebbe fornire un lungo elenco di framework Python e PHP che consentono uno sviluppo rapido, ma se si ha molto tempo, C ++ è sicuramente possibile.

Quello che non capisco è la tua decisione di fare C ++ su Windows. lol


1
Classico argomento da uomo di paglia, ci sono molte alternative veloci migliori a wordpress / php che non sono C ++. Non sto dicendo che C ++ non sia una scelta pertinente, solo il tuo argomento non è davvero ben inquadrato.
Jimmy Hoffa,

Sono d'accordo con te. Non credo che stavo cercando di rendere wordpress un'alternativa. È solo che la mia esperienza è stata ultimamente, come dimostrato, è difficile ottenere buone prestazioni dai framework popolari.
Reactgular,

1
StackExchange funziona su framework MVC ASP.NET. Node.Js offre prestazioni ridotte e se vuoi davvero qualcosa di ridicolmente performante ci sono i framework Snap o Yesod Haskell yesodweb.com/blog/2011/03/… , Haskell, JavaScript e C # che sono tutti linguaggi di raccolta dei rifiuti di alto livello.
Jimmy Hoffa,

1
Ricorda che la velocità di esecuzione del codice sul server in molti casi non è il fattore limitante in un'app Web. Gran parte del tempo viene spesa in attesa di qualcosa (database) o anche nel front-end (recupero di CSS, immagini, operazioni JavaScript, rendering HTML)
johannes

1

È certamente una scelta insolita. Il C ++ non è stato progettato pensando alle applicazioni Web e, sebbene esistano librerie per scrivere, ad esempio, applicazioni FastCGI con C ++, è necessario fare molto più lavoro per ottenere l'applicazione di base. I "linguaggi Web" di solito fanno molte cose per te che devi ottenere da altre parti in C ++, come implementare il protocollo HTTP, generare HTML, ecc.

Inoltre, le applicazioni web riguardano principalmente le stringhe, che non è esattamente il lato più forte di C ++: non esiste alcun tipo di stringa incorporato nel linguaggio stesso, e questo porta ad alcune stranezze e rende l'elaborazione delle stringhe più goffa di quanto sarebbe in più alta- lingue di livello. Gestire correttamente le codifiche dei caratteri nei bordi C ++ sulla magia nera. E il C ++ può bloccarsi molto duramente, con un codice dall'aspetto abbastanza innocente, che è molto meno probabile con un linguaggio di livello superiore (anche loro possono andare in crash, ma nella maggior parte dei casi, il server Web può eseguire il ripristino in modo corretto, specialmente su piattaforme che utilizzano un -Richiesta il modello del ciclo di vita, come PHP).

Detto questo, se hai già scritto gran parte della base di codice, C ++ potrebbe essere comunque una scelta praticabile. Dovrai trovare alcune librerie per coprire tutti i tipi di cose sul web (in particolare, vuoi essere in grado di integrare un server web HTTP autonomo nel tuo programma o collegarti, diciamo, ad Apache, tramite FastCGI o compilando un modulo; vorrai anche una sorta di libreria di template per rendere indolore il rendering di documenti HTML).

Infine, c'è il problema del mercato degli sviluppatori. Ci sono molti sviluppatori C ++ disponibili e anche più sviluppatori web, ma la sovrapposizione probabilmente non è così grande, quindi se hai mai bisogno di assumere persone per lavorare su questa cosa, avrai un tempo un po 'più difficile rispetto a, diciamo, PHP.


1

Come altri hanno detto, concettualmente, C ++ è un ottimo ambiente per lo sviluppo di un web server. Vi sono tuttavia diverse considerazioni quando prendi quella decisione.

La popolarità dei linguaggi di scripting per la progettazione di server Web sta cambiando tempo. Semplici modifiche possono essere apportate facilmente con la dimostrazione di risultati quasi immediati. Scoprirai che qualsiasi buona progettazione di server web offrirà funzionalità simili. In effetti, C ++ è un ambiente eccellente per raggiungere questo obiettivo.

La chiave per costruire un buon sistema applicativo per server Web è una separazione dell'interfaccia utente dal codice. Un obiettivo nella creazione di un ambiente di applicazioni Web è quello di evitare "La tua UI è nel mio codice e il tuo codice è nella mia UI".

Vorrei attentamente sistemi come cppcms. Mi aspetto che offra qualcosa di simile.

Non è necessario un linguaggio di scripting per offrire flessibilità e prestazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.