java - node - ¿Cómo enviar datos binarios con socket.io?
socket.io java example (1)
así que he estado teniendo problemas para enviar datos binarios con socket.io en node.js (cliente Js y cliente Android).
No hay mucha información en:
http://socket.io/blog/introducing-socket-io-1-0/
http://socket.io/get-started/chat/
Necesito usar socket io para enviar una matriz binaria, que creo y llevo.
el único código que dan es el siguiente:
var socket = new WebSocket(''ws://localhost'');
socket.binaryType = ''arraybuffer'';
socket.send(new ArrayBuffer);
Mi respuesta está abajo.
Finalmente lo tengo trabajando con JS y Android (Java), así que decidí compartirlo con ustedes.
Comencemos con el Código de Servidor: (Nodo js)
var http = require(''http'');
var app = http.createServer(function ejecute(request, response){});
var io = require(''socket.io'').listen(app);
io.on(''connection'', function(socket) {
socket.on(''message'', function(data){
console.log("recieved data:");
console.log(data);
var bufArr = new ArrayBuffer(4);
var bufView = new Uint8Array(bufArr);
bufView[0]=6;
bufView[1]=7;
bufView[2]=8;
bufView[3]=9;
socket.emit(''message'',bufArr);
});
});
app.listen(3000);
Pasemos al cliente de Javascript
var socket = io("http://localhost:3000");
socket.emit(''message'', ''hola from js client'');
socket.on(''message'', function(msg){
var bufView = new Uint8Array(msg);
console.log(msg)
});
Y, finalmente, demostrémosle al cliente de Android (java):
final Socket socket = IO.socket("http://localhost:3000",opts);
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
socket.emit("message","hello from java");
}
});
socket.on("message", new Emitter.Listener() {
@Override
public void call(Object... args) {
byte[] bytearray = (byte[])args[0]; //received bytes
for (byte b : bytearray) {
System.out.println("byte"+b);
}
}
});
socket.on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {}
});
Espero que sea útil para todos ustedes. ¡Aclamaciones!