Perché il motore PHP non può gestire la comunicazione HTTP?

1

Il motore PHP interpreta il codice PHP ed è perfettamente in grado di lavorare con socket, formando pacchetti HTTP, ecc. Perché allora abbiamo bisogno di un server Apache separato, quando le funzioni di http serving potrebbero essere incorporate nell'applicazione php insieme al codice di creazione della pagina?

    
posta Mofariha 13.03.2013 - 22:07
fonte

4 risposte

6

Oltre alla risposta di Yannis, voglio aggiungere alcuni punti.

Il motore PHP può gestire socket in modo da poter scrivere un web server di base. Puoi anche scrivere un server Web in Visual Basic 6 con il controllo Winsock, ma non è lo strumento giusto per il lavoro.

Apache è un server Web estremamente potente. Non ha senso reinventare la ruota, in particolare per un progetto non commerciale con un ambito limitato, quando il team di PHP può sfruttare i test, la ricerca e lo sviluppo necessari per la creazione di Apache.

L'altra cosa che devi assolutamente considerare è che PHP non supporta i thread. Esistono soluzioni alternative (utilizzando shell_exec , ad esempio), ma non si è in grado di scrivere un server multithreading.

    
risposta data 13.03.2013 - 23:37
fonte
4

A partire da PHP 5.4 non abbiamo bisogno di un server web separato, CLI SAPI fornisce una build in. È un'aggiunta abbastanza nuova alla lingua, e Non vorrei usare in produzione :

This web server is designed for developmental purposes only, and should not be used in production.

Il build nel web server potrebbe non essere pronto per la produzione (ancora?), ma dimostra che PHP è più che capace di funzionare senza un server web di terze parti. Per quanto riguarda la creazione di un server Web in PHP, questo è anche possibile e un buon esempio è nanoweb . Il progetto sembra essere morto, ma è ancora possibile scaricare la sua fonte e scherzare con esso.

    
risposta data 13.03.2013 - 22:55
fonte
1

Non solo PHP, ma qualsiasi linguaggio utilizzato per lo sviluppo di applicazioni web. In realtà tutti, incluso PHP come menzionato da Yannis Rizos, possono gestire autonomamente le comunicazioni http e vengono utilizzate a scopo di test. Ma non è usato per la produzione. I motivi sono:

Configurabilità

I server Web dedicati supportano host virtuali, riscrittura degli URL, autenticazione, SSL e cose simili che dovrebbero essere implementate in ogni runtime di ogni applicazione Web.

La presenza di un server Web front-end separato e di un motore applicativo di back-end consente di combinare e abbinare funzionalità fornite da diverse implementazioni di ciascuna.

Interfaccia uniforme

Un singolo computer ha solo una porta 80, quindi solo un processo può ascoltarlo. Ma il tipico server web pubblico esegue più Web e applicazioni Web spesso implementati in lingue diverse. L'unico modo per farli funzionare tutti insieme sullo stesso host è avere il server web davanti a loro che invia la richiesta in modo appropriato.

Affidabilità

Gli errori nell'applicazione Web possono causare l'arresto anomalo del motore o almeno la mancata risposta del motore. Il server Web può proteggere gli altri visitatori da tali problemi eseguendo il multiplexing delle richieste su più istanze del back-end e riavviando tali istanze quando presentano problemi. Apache normalmente riavvia preventivamente i suoi lavoratori dopo circa 100 richieste. Diversi front-end possono fare le cose in modo diverso, ma tutti sono in grado di riavviare il back-end che non funziona in modo corretto.

    
risposta data 14.03.2013 - 09:44
fonte
0

Sarebbe difficile avere più richieste contemporaneamente.

Comunque PHP 5.5 avrà coroutine che dovrebbero rendere molto più ragionevole la scrittura di server semplici. (se le coroutine in PHP sono le stesse delle coroutine in altri sistemi).

Ci sono alcuni server web Python puri, e funzionano alla grande.

    
risposta data 14.03.2013 - 09:23
fonte

Leggi altre domande sui tag