Estoy tratando de hacer un experimento con HTML5, WebSocket y File API. Estoy usando la implementación Tomcat7 WebSocket. Puedo enviar y recibir mensajes de texto del servlet. Lo que quiero hacer ahora es enviar desde el servlet a los objetos JSON del cliente, pero quiero evitar el mensaje de texto para omitir el JSON.parse (o similar) en el cliente, así que estoy tratando de enviar mensajes binarios. . La parte servlet es muy simple:File API - Blob to JSON
String s = "{arr : [1,2]}";
CharBuffer cbuf = CharBuffer.wrap(s);
CharsetEncoder encoder = Charset.forName("UTF-8").newEncoder();
getWsOutbound().writeBinaryMessage(encoder.encode(cbuf));
getWsOutbound().flush();
Después de este mensaje, en el cliente veo que he recibido una trama binaria, que se convierte en un objeto Blob (http://www.w3.org/TR/FileAPI/#dfn-Blob). La pregunta es: ¿es posible obtener el objeto JSON del Blob? Eché un vistazo a la interfaz FileReader (http://www.w3.org/TR/FileAPI/#FileReader-interface) y utilicé un código como este para inspeccionar lo que el FileReader puede hacer (la primera línea crea un Blob nuevo, para que pueda probar sobre la marcha si lo desea):
var b = new Blob([{"test": "toast"}], {type : "application/json"});
var fr = new FileReader();
fr.onload = function(evt) {
var res = evt.target.result;
console.log("onload",arguments, res, typeof res);
};
fr.readAsArrayBuffer(b);
usando todos los métodos "readAs ..." que vi en la implementación de File Reader (estoy usando Chrome 22). De todos modos, no encontré algo útil.
¿Tiene alguna sugerencia? Gracias.
¿Cómo cree que se puede enviar JSON-secuencias como mensajes binarios? JSON es solo una codificación para objetos, y realmente no se puede enviar la estructura binaria dependiente de la implementación para evitar alguna función 'analizar'. – Bergi
sí, tienes razón, no tiene ningún sentido. ¡Gracias! – Antonio