HTTP Proxy / FastCGI / SCGI non chiude la connessione quando il client disconnesso - bug o funzionalità?

StackOverflow https://stackoverflow.com/questions/1354690

Domanda

Sto lavorando su Comet supporto per < a href = "http://cppcms.sourceforge.net/" rel = "nofollow noreferrer"> CppCMS quadro attraverso lunghi sondaggi XMLHttpRequest. In molti casi, tale richiesta è chiusa da cliente prima è stata data alcuna risposta dal server -. Ad esempio, la pagina viene chiusa, si muove utente per altra pagina o si tratta solo di refeshed

Al lato server mi aspetto che vorrei ricevere la notifica che la connessione viene interrotta. Ho testato l'applicazione tramite 3 connettori:. FastCGI, SCGI e semplice proxy HTTP

A partire da 3 principali server Web UNIX, Apache2, lighttpd e Nginx, solo l'ultima aveva chiuso Collegamento a permettere previsto la mia applicazione per rimuovere la richiesta dalla coda di attesa - questo ha lavorato per entrambi i connettori proxy FastCGI e HTTP. (Nginx non ha modulo SCGI per impostazione predefinita).

Altro, Apache e Lighttpd non si chiudono connessione o informano il backend su scollegato i clienti, il procedere come se il client è ancora on line. Questo accade per tutti e 3 supportato API:. FastCGI, SCGI e HTTP Proxy

Avevo aperto un problema per Lighttpd , ma cosa più conserns me è il fatto che Apache - matura e ben supportato web server come lighttpd e non svela il back-end server che client era andato.

Domande:

  1. Si tratta di un bug o questa è una caratteristica? C'è qualche motivo per non chiudere la connessione tra il server Web e back-end applicazione?
  2. Ci sono la vita reale applicazione Comet lavorando dietro questi server tramite backend FastCGI / SCGI / HTTP-proxy?
  3. Se quanto sopra è vero, come fanno a affrontare questo problema? Capisco che posso timeout tutti i collegamenti ogni 10 secondi, ma mi piacerebbe tenerli in stand-by per quanto cliente ascolta - perché questo consente una più facile scale up - ogni connessione è molto pigolio - il costo è solo la presa opended.

Grazie!

È stato utile?

Soluzione

(1) Caratteristica. O, più precisamente, fallout di un dettaglio di implementazione.

Una connessione TCP / IP non comporta un flusso costante di traffico avanti e indietro. Così, non c'è modo di sapere che un cliente è andato senza (a) il cliente ti dice che sta chiudendo la connessione o (b) un timeout.

(2) Io non sono specificamente familiarità con la cometa o CppCMS. Ma, sì, ci sono tutti i tipi di server CMS correre dietro i server web menzionati e tutti hanno a che fare con questo problema (e, sì, è un dolore).

(3) Timeout sono l'unico modo, ma si può attenuare il dolore, per così dire. Avere il ping client al server attraverso la connessione ogni N secondi quando non c'è altro modo alcuna attività. Non devi fare nulla e si può virare roba sulla risposta; le notifiche di modifiche simultanee o qualsiasi altra cosa avete bisogno.

Sei corretta in quanto è sorprendente che mod_fastcgi non supporta dire il backend che Apache ha rilevato la disconnessione o la connessione scaduta. E tu non sei il primo ad essere costernato.

La seconda patch in questa pagina dovrebbe risolvere quel particolare problema:

http://osdir.com/ml/web .fastcgi.devel / 2006-02 / msg00015.html

Altri suggerimenti

http://ncannasse.fr/blog/tora_comet

Non ho alcuna informazione concreta per te, ma in questo articolo non ricordare che in grado di rilevare quando il client si è scollegato dalla Apache. Vedere tora.Queue. E suona come la sorgente è disponibile nel neko CVS, per cui si potrebbe essere in grado di trovare qualche indizio lì. In bocca al lupo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top