Estoy usando el marco de juego, para generar una respuesta fragmentada. El código es:¿Cómo escribir javascript en el lado del cliente para recibir y analizar la respuesta `chunked` a tiempo?
class Test extends Controller {
public static void chunk() throws InterruptedException {
for (int i = 0; i < 10; i++) {
String data = repeat("" + i, 1000);
response.writeChunk(data);
Thread.sleep(1000);
}
}
}
Cuando uso del navegador para visitar http://localhost:9000/test/chunk
, puedo ver los datos mostraron un aumento cada segundo. Pero, cuando escribo una función de JavaScript para recibir y manejar los datos, descubro que bloqueará hasta que todos los datos recibidos.
El código es:
$(function(){
$.ajax(
"/test/chunked",
{
"success": function(data, textStatus, xhr) {
alert(textStatus);
}
}
);
});
puedo ver un cuadro de mensaje apareció después de 10 segundos, cuando todos los datos recibidos.
¿Cómo obtener la transmisión y manejar los datos a tiempo?
¿por qué es mejor utilizar ArrayBuffer? – 4esn0k
@ 4esn0k: por ejemplo, si decide usar un protocolo binario, lo cual es una buena idea. Otro punto aquí es que el navegador no tiene que mantener todos los datos en la memoria, y por lo que yo entiendo, es más fácil de lograr con 'ArrayBuffer' que con un' String'. 'slice' debería funcionar mejor, ya que no tiene que funcionar con UTF-8 String como' substring', pero puede usar índices de matriz. –
ver https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType – 4esn0k