In primo luogo lasciatemi dire che se l'obiettivo è un server HTTP leggero che serve pagine PHP, questo è già stato fatto. Dai un'occhiata a nginx.
Per quanto riguarda un'esperienza di apprendimento, hai scelto qualcosa che è in realtà abbastanza difficile.
Il multithreading è difficile nei momenti migliori. Su C/C++ (qualsiasi cosa con allocazione manuale della memoria in realtà) è un ordine di grandezza più difficile.
Aggiunto a questo è la comunicazione di rete. Ci sono stranezze da affrontare, diverse versioni di HTTP (per lo più non un problema ora), tutti i tipi di intestazioni HTTP da gestire e così via.
La soluzione più intuitiva a questo problema è avere un processo che ascolti una porta. Quando riceve una richiesta, genera un processo, che può essere eseguito su un processo PHP, se necessario.
Questo tuttavia non scala. La prima (ovvia) ottimizzazione consiste nell'utilizzare thread anziché processi e qualche forma di comunicazione interframa. Mentre questo aiuta, sarà ancora in scala fino ad ora.
Andare oltre e guardare la gestione della presa asincrona, che è piuttosto bassa.
Tutti questi sono tuttavia progetti abbastanza grandi.
C'è qualche ragione particolare per farlo in C/C++? O qualche ragione particolare per cui stai imparando una o entrambe le lingue? Queste lingue hanno certamente il loro posto ma stanno diventando sempre più lingue di nicchia. Le lingue/piattaforme gestite (garbage collection) hanno quasi completamente preso il sopravvento. Joel sostiene che la raccolta dei rifiuti è l'unico aumento enorme della produttività nella programmazione negli ultimi 20 anni e io tendo ad essere d'accordo.
Ho fatto questa stessa cosa (senza il supporto PHP) in Visual Basic 6 anni fa, ma tutte le risorse del socket Async erano già state gestite con il controllo Microsoft Winsock. Inoltre, era Visual Basic, quindi sarà molto più difficile scrivere una buona in C o C++. (Mi piacerebbe molto attenermi a C e diventare davvero bravo prima di andare in C++). I socket asincroni sono davvero complessi utilizzando solo le API? Onestamente non ne ho idea perché vengo da Visual Basic. : P ** Modifica: ** Grazie per il collegamento a nginx, mai saputo che esistesse! (Voglio ancora provare a scriverne uno io stesso come esperienza di apprendimento). –
Non sono così sicuro di essere completamente preso. Apache, Lighttpd, Nginx, Cherokee ... tutto scritto in C. Ci sono anche dei raccoglitori di malloc() per la raccolta di immondizie adatti per C. Sono d'accordo che per lo più solo programmatori di sistemi che usano C oggi, ma penso che la nicchia sia un po 'più grande di quanto tu descrivi. –
@guitar C e C++ sono lingue molto diverse con diversi paradigmi di programmazione. Abilità con uno non implica né necessariamente aiuta con l'altro. – cletus