Re: Socket
Von: Roberto C (nograzie@noncomproviagra.it) [Profil]
Datum: 03.03.2008 14:26
Message-ID: <fqgu9g$smn$1@news.newsland.it>
Newsgroup: it.comp.lang.perl
Datum: 03.03.2008 14:26
Message-ID: <fqgu9g$smn$1@news.newsland.it>
Newsgroup: it.comp.lang.perl
Bepp ha scritto: > La situazione mi si è complicata quando il client, nell’invio delle request, utilizzando il protocollo HTTP/1.1 connessione permanente che, per quel che sono le mie conoscenze, invia più request sulla stessa socket. Monitorando il colloquio vedo che dopo la prima request il server chiude la socket impedendo l’acquisizione della successiva request. > Innanzi tutto non so se ciò dipende dal mio demon. Ho comunque cercato cercato altre soluzioni, ovvero di leggere il contenuto della socket con un ciclo sotto riportato, e nel quale passo al thread solo il body della request: Non e' un problema da poco. Davvero vuoi acquisire tutte le richieste HTTP/1.1 nell' unica connessione? non e' illegale rispondere alla richiesta di un cliente Connect: keepalive con una Connect: close e poi chiudere la connessione dopo l' output. Sara' compito del Client automatizzare la riconnessione per proporre le successive richieste GET/POST .... Al limite per essere conforme ad HTTP/1.1 dovresti leggere Content-length: bytes dopo la fine degli headers e produrre un output con content-length: se possibile saperlo prima. Voler gestire HTTP/1.1 in keep-alive non puo' prescindere dal considerare il valore di Content-Length per sapere done inizia la prossima GET/POST Da quello che vedo, confidi che vedo, confidi che con unica recv possa acquisire tutto il messaggio HTTP del client (vedi obiezioni in recenti post nello stesso NG), comunque se funziona e quando funziona, trasformare il codice per acquisire richieste multiple non e' possibile, e' da riscrivere. Come detto, puoi non gestirle. Lo sforzo puo' farlo il client. Anche ipotizzando che il Client mandi tutte le richieste insieme, e la tua recv confermi l' intera ricezione, non avendo in HTTP/1.1 una risposta HTTP/1.1 200 OK dovra' ripeterla. Secondo me puoi anche rispondere a HTTP/1.1 con HTTP/1.0. quesiti che pongo sono: > 1 – la modalità di colloquio 8chiusura della socket, non dipende dal mio demon ? non vedo close nel codice che hai postato, ma immagino ci debba essere. > 2 – se dipende dal demon come posso gestire correttamente questa situazione. ? Appunto ispezionando gli headers che arrivano dal client, trovare content-length e leggere quel numero di bytes dopo la linea vuota di fine headers. La successiva lettura sara' allineata con al nuova richiesta HTTP. Oppure rispondi in HTTP/1.0 e lasci al client l' onere di riprovare. (io farei cosi'. riscrivere tutto l' HTTP/1.1 non e' facile) > Ringrazio anticipatamente chiunque sia in grado di darmi qualche indicazione fornendo, se necessario, ulteriori indicazioni. > Buon fine settimana. > Beppe Spero che questo intervento possa servirti. Ciao Roberto. -- questo articolo e` stato inviato via web dal servizio gratuito http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it[ Auf dieses Posting antworten ]
