2013-02-20 14 views
6

Ciao, la mia domanda è come funziona il flusso di dati esattamente nel web server Apache + PHP.apache php> richieste degli utenti

Quando l'utente accede a url: localhost/index.php e nello stesso momento in cui un altro utente accede allo stesso url, credo che le richieste vengano eseguite una per una (non multi-thread) e il primo utente ottenga la risposta di un'altra.

la domanda è: se in qualche modo la prima richiesta Soggiorno in loop per lungo tempo come 1min gli altri utenti dovrebbero aspettare la prima richiesta per finire poi le loro richieste di essere finito al fine di ottenere risposta da server Web Apache + PHP? se la risposta è sì (altri utenti dovrebbero attendere in coda): possiamo fare richieste in parallelo (multi-thread) per evitare l'attesa in coda

+0

Apache ha diversi modelli multi-threading tra cui scegliere e PHP ha diversi SAPI disponibili. In pratica, è irrilevante dal punto di vista della codifica. –

risposta

9

Mentre PHP può essere a thread singolo, Apache può eseguire più -elaborazione e multi-thread. Ciò consente a molte richieste di essere eseguite simultaneamente. Puoi configurare quante richieste simultanee di fatto.

Si può effettivamente vedere Apache che serve queste richieste dal vivo, vedere quali sono in attesa e che vengono servite tramite mod_status (http://httpd.apache.org/docs/2.2/mod/mod_status.html).

+1

in che modo si chiama lo stesso script per essere eseguito e prima si desidera bloccare più di 1 minuto? –

+0

Intendi con due utenti diversi? In tal caso, sì. Apache servirà molti, molti utenti tutti allo stesso tempo. Puoi considerarlo come molti, molti server Apache che lavorano tutti indipendentemente e non si preoccupano di quello che stanno facendo gli altri, anche se si tratta di una sola installazione di Apache. –

+2

ho uno script che esegue 8 ore dopo che lo chiamo dal browser, ma quando provo ad aprire qualche altro script da un'altra scheda del browser mi carico solo come in attesa di risposta (dovrebbe essere il problema di chrome) ma se apro da un altro browser (ie9) Posso ottenere la risposta al più presto, questo dimostra che apache è multi-thread. –

2

Apache ha più thread in modo che più script PHP possano essere eseguiti contemporaneamente.

I server Web come Nginx utilizzano un'architettura basata su eventi. I/O asincrono e tutto il jazz.

server web di solito hanno una sorta di meccanismo per consentire loro di gestire più di 1 richiesta alla volta, o almeno farlo sembrare come possono.

Apache utilizza thread, Nginx utilizza un ciclo di eventi, ma non sono seriali nel senso che si desidera. La ragione è molto semplice: spreca risorse. Mentre il tuo script PHP è in attesa che il disco fisso si sposti nella posizione corretta in modo da poter leggere un blocco da un file che stai leggendo, potresti anche fare qualcos'altro, ad es. gestire un'altra richiesta che non richiede I/O in questo momento.

Se è fondamentale una certa richiesta finisce prima che altri utenti fanno richieste si dovrebbe prendere in considerazione il passaggio a un'architettura asincrona più disaccoppiato. Non so quanto sei investito nella tua attuale soluzione. La gestione degli eventi può essere implementata semplicemente come un semplice sondaggio o addirittura uno long poll.

+1

come posso capire dalla tua risposta apache è multi-thread ed esegue richieste parallele nello stesso tempo in teoria. ma che ne dici se lo stesso script è chiamato per essere eseguito e prima richiedere il congelamento di più di 1min? la seconda richiesta verrà eseguita nello stesso tempo o aspetterà di terminare la prima richiesta? –

Problemi correlati