|
|
|
|
Strumenti |
10-03-2010, 18:06 | #1 |
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
[JAVA/Servlet] Output "a pezzettini"
Salve a tutti,
Il mio problema è che devo spedire al client dell'output testuale in momenti diversi, ma nell'ambito della stessa richiesta (doGet). Ho provato a fare una prova così: Codice:
for( int i = 0; i < 10; i++ ) { Thread.sleep(1000); w.print(i); w.flush(); } e non una cifra al secondo. Si può fare? Grazie
__________________
|Java Base| |Il Mio Blog 1| |Il Mio Blog 2| |JavaCC in 30 minuti| |
10-03-2010, 19:34 | #2 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
questo deriva dal funzionamento di http che è stateless, perchè una volta consegnata la risposta si perde lo stato conversazione ed in base alle versione si chiude anche la connessione, senza aspettare un timeout.
Probabilmente la soluzione al tuo problema può essere un server-push(HTTP streaming) e/o AJAX. |
11-03-2010, 18:28 | #3 |
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
A me sembra più che altro che flush non funzioni a dovere...
Potrei provare con una strategia "long polling": nel caso della prova di prima chiedo un numero, che viene ritornato dopo 1 secondo, poi ne chiedo immediatamente un altro, e così via. Ma non mi sembra la soluzione ottimale. Grazie comunque
__________________
|Java Base| |Il Mio Blog 1| |Il Mio Blog 2| |JavaCC in 30 minuti| |
11-03-2010, 18:33 | #4 |
Member
Iscritto dal: Mar 2008
Messaggi: 140
|
..penso dipenda dal protocollo http prova prima del flush a mettere un carattere a capo...
|
11-03-2010, 18:57 | #5 |
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Provato, non va.
Ma ho scoperto che dopo aver scritto poco più di 1000 caratteri flush comincia a funzionare!
__________________
|Java Base| |Il Mio Blog 1| |Il Mio Blog 2| |JavaCC in 30 minuti| |
11-03-2010, 19:18 | #6 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3305
|
Si può fare ma non come intendi te. Il browser ovviamente mostrerà il risultato solo quando ha ricevuto l'intera risposta HTTP che avviene appunto dopo 10 secondi. Nel tuo caso l'alternativa corretta è impiegare Ajax lato client.
|
11-03-2010, 20:41 | #7 |
Member
Iscritto dal: Mar 2008
Messaggi: 140
|
..scusa non avevo letto che volevi vederlo dal browser....allora mi sà che ho vai di chiamate asincrone o vai di chiamate asincrone...
|
12-03-2010, 18:14 | #8 | ||
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Quote:
Per quanto riguarda AJAX non me ne intendo, per caso fa più richieste HTTP, una per ogni "dato"? Quote:
In realtà lo devo leggere da un'applicazione Flex, e a tal proposito ho aperto un altro thread: http://www.hwupgrade.it/forum/showthread.php?t=2159359
__________________
|Java Base| |Il Mio Blog 1| |Il Mio Blog 2| |JavaCC in 30 minuti| Ultima modifica di lovaz : 12-03-2010 alle 18:18. Motivo: Aggiunta link |
||
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:17.