javascript - tutorial - ¿Cómo enviar arraybuffer como binario a través de Websocket?
websockets php (2)
Gecko11.0 ArrayBuffer ha enviado y recibido soporte para datos binarios.
connection = new WebSocket(''ws://localhost:1740'');
connection.binaryType = "arraybuffer";
connection.onopen = onopen;
connection.onmessage = onmessage;
connection.onclose = onclose;
connection.onerror = onerror;
enviando datos binarios:
function sendphoto() {
imagedata = context.getImageData(0, 0, imagewidth,imageheight);
var canvaspixelarray = imagedata.data;
var canvaspixellen = canvaspixelarray.length;
var bytearray = new Uint8Array(canvaspixellen);
for (var i=0;i<canvaspixellen;++i) {
bytearray[i] = canvaspixelarray[i];
}
connection.send(bytearray.buffer);
context.fillStyle = ''#ffffff'';
context.fillRect(0, 0, imagewidth,imageheight);
}
Recibiendo datos binarios:
if(event.data instanceof ArrayBuffer)
{
var bytearray = new Uint8Array(event.data);
var tempcanvas = document.createElement(''canvas'');
tempcanvas.height = imageheight;
tempcanvas.width = imagewidth;
var tempcontext = tempcanvas.getContext(''2d'');
var imgdata = tempcontext.getImageData(0,0,imagewidth,imageheight);
var imgdatalen = imgdata.data.length;
for(var i=8;i<imgdatalen;i++)
{
imgdata.data[i] = bytearray[i];
}
tempcontext.putImageData(imgdata,0,0);
var img = document.createElement(''img'');
img.height = imageheight;
img.width = imagewidth;
img.src = tempcanvas.toDataURL();
chatdiv.appendChild(img);
chatdiv.innerHTML = chatdiv.innerHTML + "<br />";
}
Estoy trabajando en un proyecto con Mozilla Europa. En este proyecto, utilizo websocket de Worlize (lado del servidor) y Mozilla (lado del cliente), Node.js para intentar cargar archivos de un cliente a un servidor.
Mi objetivo actual es enviar un arraybuffer
del archivo al servidor. Crear el arraybuffer y enviarlo está bien.
Pero mi servidor me dice que arraybuffer
es un mensaje utf8 y no un mensaje binario.
¿Entiendo mal algo? Si no, ¿cómo puedo corregir eso?
Lado del cliente:
reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = function(e) {
connection.send(e.target.result);
};
Lado del servidor:
ws.on(''message'', function(message,flags) {
if (!flags.binary) {
//some code
}
else {
console.log(''It/'s a binary'');
}
Intento con Blob
también, mismo resultado. La parte binaria es invisible.
Note: Prior to version 11, Firefox only supported sending data as a string.
Fuente: https://developer.mozilla.org/en/WebSockets/Writing_WebSocket_client_applications