nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

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
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 ]