C'è un modo per cancellare il testo di risposta di un oggetto XHR senza distruggere l'oggetto XHR?Comet, responseText e utilizzo della memoria
È necessario mantenere aperta una connessione permanente a un server Web per inviare dati in tempo reale a un browser. Il problema è che c'è una quantità relativamente grande di dati in arrivo (diverse centinaia di K al secondo costantemente), quindi l'utilizzo della memoria è un grosso problema, perché questa connessione deve rimanere aperta per almeno alcuni minuti. responseText diventa molto grande molto rapidamente, anche se il JSON che invio è stato ridotto al minimo.
A causa del modo in cui funziona l'applicazione sul lato server, se utilizzo il polling breve in stile AJAX e distruggo l'oggetto XHR quando ho finito, mi manca una quantità significativa di dati importanti anche nei pochi millisecondi. per analizzare la risposta, creare un nuovo XHR e inviarlo. Non ho la possibilità di utilizzare richieste sovrapposte, poiché il server Web accetta solo una connessione alla volta. (Non chiedere.) Quindi Comet è esattamente il modello che mi serve.
Quello che mi piacerebbe fare è analizzare ogni blocco JSON mentre ritorna dal server, e quindi cancellare responseText in modo che possa continuare ad usare la stessa connessione. Tuttavia, responseText è di sola lettura. Non può essere svuotato direttamente da alcun metodo che ho trovato.
C'è una parte dell'immagine che mi manca qui? Qualcuno sa trucchi che posso usare per liberare responseText quando ho finito di leggerlo? O c'è un altro posto dove possono andare le risposte del server?
Non ho incluso il codice perché questa è una domanda praticamente non codificante per il codice. Le routine Javascript che generano gli XHR e gestiscono i dati restituiti sono molto, molto semplici.
Grazie. Capisco la modella. Speravo solo che ci fosse un modo per mantenere la connessione senza essere costretti a memorizzare tutto ciò che è stato mai ricevuto su quella connessione in un buffer enorme. Il polling lungo è un hack in ogni caso, quindi suppongo che stia chiedendo molto a desiderare che funzioni esattamente nel modo in cui mi serve :) – glomad
@ithcy: in realtà sembra una richiesta ragionevole. Non ci avevo mai pensato molto prima che me lo chiedessi. Un 'xhr.flushResponseBuffer()' o qualcosa potrebbe essere utile per le connessioni a lunga esecuzione, e farebbe risparmiare il salvataggio di un dannato numero di linea di riferimento tutto il tempo. –