Como conectarse a socket.io de Nodejs

Hoy son muchas las aplicaciones que trabajan con socket y tiempo real, es por esto que un servidor Nodejs es casi fundamental para esta labor.

Para comenzar lo primero es agregar la dependencia de la librería a nuestro archivo grade en nuestro proyecto en Android Studio.

compile('io.socket:socket.io-client:0.7.0') {
  // excluding org.json which is provided by Android
  exclude group: 'org.json', module: 'json'
}

Así en la actividad que queramos utilizar el socket creamos el objeto Socket.

Socket socket;

y algunas constantes que utilizaremos en nuestro código, recuerden cambiar la constante URL_SOCKET por la dirección de su servidor.

final static String URL_SOCKET = "http://localhost/";
final static String MY_EVENT = "my event";
final static String PARAM_NAME = "name";
final static String PARAM_IMAGE = "image";

Instanciamos nuestra conexión al servidor pasando como parámetro la url de este mismo.

try{
  /* Instance object socket */
  socket = IO.socket(URL_SOCKET);
}catch (URISyntaxException e){
  e.printStackTrace();
}

Luego creamos los eventos principales de nuestro socket: EVENT_CONNECT y EVENT_DISCONNECT, estos son los que recibirán las emisiones desde el servidor.

socket.on(Socket.EVENT_CONNECT, new Emitter.Listener(){
  @Override
  public void call(Object... args) {
    /* Our code */
  }
}).on(Socket.EVENT_DISCONNECT, new Emitter.Listener(){
  @Override
  public void call(Object... args) {
    /* Our code */
  }
});

Y crear nuestros propios eventos.

socket.on(MY_EVENT, new Emitter.Listener(){
  @Override
  public void call(Object... args) {
    /* Our code */
  }
});

Con esto ya podemos abrir la conexión.

socket.connect();

Además disponemos de otras funciones como para verificar el estado de la conexión.

/* return boolean */
socket.connected();

Y para desconectar nuestro socket.

socket.disconnect();

Si lo que queremos es emitir eventos por nuestro socket utilizamos, enviando cadenas de texto o también datos binarios.

JSONObject obj = new JSONObject();
obj.put(PARAM_NAME, "Pablo");
obj.put(PARAM_IMAGE, new byte[42]);

/* Emit event */
socket.emit(MY_EVENT, obj);

También podemos capturar el callback que retorna el servidor.

socket.emit(MY_EVENT, obj, new Ack() {
  @Override
  public void call(Object... args) {
    /* Our code */
  }
});

Y eso es todo! Espero que les funcione y si tienen dudas las comenten abajo. Saludos!

Comenta este post