PDA

View Full Version : [PHP/C++]Interazione php e c++: velocità, risorse.


thumbria
07-11-2008, 14:38
Dato che PHP è un linguaggio di scripting non è certo adatto per compiti che richiedono "elaborazioni complesse" (vale a dire non si fa un motore di ricerca in php), per i quali è meglio un linguaggio come C++.
Appunto per questo mi chiedo come si faccia a far interagire nel modo migliore un frontend in php con un backend in c++, dove per "migliore" si intende più veloce/con meno risorse ?

Nel caso di un ipotetico servizio web non credo sarebbe adatto usare un semplice exec() o similari. La mia idea è che lo script php dovrebbe essere il client rispetto al programma c++ che farebbe da server per elaborare i dati e restituire un risultato.
La mia è una domanda teorica nel senso che non ho un progetto specifico, ma mi interesserebbe sapere come farlo in pratica.

cionci
07-11-2008, 15:35
Per fare una ricarca il 90% delle performance dipendono dal motore SQL che usi per la memorizzazione dei dati e dalle query che usi per recuperarli. Potrebbe accadere di recuperare più tempo ottimizzando la query per il DBMS specifico che usando le stesse query passando il tutto su C++ ;)
Prima scrivi tutto in PHP. Se non ti bastano le prestazioni che hai ottenuto allora a quel punto potrai pensare di demandare parte dell'elaborazione ad una libreria esterna. Php è estendibile con estensioni scritte in C e C++: http://devzone.zend.com/node/view/id/1021

thumbria
07-11-2008, 16:55
Grazie della risposta. In effetti in taluni casi sarebbe la soluzione migliore, mi chiedo però se potrebbe andar bene in tutti. Come ho detto non ho niente di concreto, ma vorrei conoscere le varie possibilità, per una questione di "cultura".

Mi spiego, secondo me ci sono due punti problematici:
1) fare un'estensione mi sembra abbastanza complesso ed è quindi utile più che altro quanto si ha un progetto stabile, non andrebbe bene nel caso di programmi in evoluzione costante.
2) se la parte di interfaccia e quella di elaborazione non si trovassero sullo stesso computer ovvero non fossero sviluppati dalle stesse persone la gestione del progetto diverrebbe molto complicata.

In tali casi non sarebbe meglio metter un programma-server c/c++ in ascolto su di una porta (con magari la parte in c++ che scrive/legge e quella in php che legge solo) ? Oppure sarebbe troppo lento/impiegherebbe troppe risorse (probabilmente converrebbe solo per un certo numero di richieste) ?

Spero di non abusare della tua pazienza (tanto nel caso puoi sempre evitare di rispondermi :D).

cionci
07-11-2008, 17:12
1) appunto per questo dico: prima sviluppa tutta l'applicazione in PHP e dopo fai un ragionamento sulle performance ;) L'estensione può essere testata anche in locale e senza passare dal web server (ricordati che php può essere usato direttamente tramite l'eseguibile del suo interprete).
2) mah, non sarebbe una bellissima idea, soprattutto visto che si lavora su database server, che ripeto andrà a prendersi carico della maggior parte del lavoro, allora conviene rendere remoto il DBMS e non l'applicazione C++. L'interfaccia per il DBMS in remoto è identica a quella del DBMS in locale ;)

In ogni caso è impossibile fare ipotesi più dettagliate, dipende troppo da progetto a progetto.
Ad esempio se si trattasse di un progetto così custom, non utilizzerei mai PHP, ma una servlet Java con l'interfaccia in JSP. Dopo con JNI volendo si può implementare la parte in C++, sempre che sia necessaria.

thumbria
07-11-2008, 18:14
Thanks!