Cómo cerrar / volver a intentar / administrar un WebSocket con Koush AndroidAsync?

Estoy usando AndroidAsync de Koush para un cliente de WebSocket. Mi código sigue el ejemplo en https://github.com/koush/AndroidAsync y funciona. (Ejemplo copiado a continuación.)

Necesito mi aplicación para abrir un websocket cuando se inicia, sin embargo, necesito manejar algunos problemas:

A) Tengo que permitir al usuario cambiar la dirección del servidor websocket. En este caso, necesito cerrar el websocket existente (que puede haber fallado) y abrir un websocket al nuevo servidor.

B) El servidor puede estar inactivo o no estar disponible. En este caso me gustaría informar que volver a la actividad. Actualmente simplemente falla silenciosamente.

Así que en orden de importancia:

  1. ¿Cómo cierro el websocket?
  2. ¿Cómo puedo abrir un websocket de manera eficiente a una nueva dirección? (¿Puedo reutilizar mi AsyncHttpClient?)
  3. ¿Cómo vuelvo a intentar una conexión fallida o perdida?
  4. ¿Cómo puedo notificar que la conexión ha fallado / cerrado?

Si esto se documenta en algún lugar por favor hágamelo saber.

Ejemplo de código del sitio web copiado a continuación:

AsyncHttpClient.getDefaultInstance().websocket(get,"my-protocol",new WebSocketConnectCallback(){ @Override public void onCompleted(Exception ex,WebSocket webSocket){ if(ex!=null){ ex.printStackTrace(); return; } webSocket.send("a string"); webSocket.send(new byte[10]); webSocket.setStringCallback(new StringCallback(){ public void onStringAvailable(String s){ System.out.println("I got a string: "+s); } }); webSocket.setDataCallback(new DataCallback(){ public void onDataAvailable(ByteBufferList byteBufferList){ System.out.println("I got some bytes!"); // note that this data has been read byteBufferList.recycle(); } }); } }); 

One Solution collect form web for “Cómo cerrar / volver a intentar / administrar un WebSocket con Koush AndroidAsync?”

He leído el código fuente de AndroidAsync .

Cómo cerrar

WebSocket interfaz WebSocket hereda el método close() de la interfaz DataEmitter . Llamar al método close() cierra la conexión WebSocket, pero tenga en cuenta que la implementación ( WebSocketImpl.close() ) no realiza el apretón de manos de cierre que es requerido por RFC 6455 .

También, onDisconnect() en WebSocketImpl cierra el socket subyacente sin realizar el apretón de manos de cierre cuando recibe un marco cercano .

Por lo tanto, en cualquier caso, el cierre de apretón de manos no se realiza. Pero, esto no es un problema grave si no te importa registros de errores en el lado del servidor.

Cómo volver a intentarlo y cómo proporcionar notificaciones

Usted puede ser capaz de detectar la desconexión mediante el establecimiento de callbacks a través del método setEndCallback() y el método setEndCallback() , pero no estoy seguro.

Cómo volver a intentarlo y cómo proporcionar notificaciones depende de usted. Puede hacer lo que quiera después de detectar la desconexión.

Recomendación

Si desea recibir eventos de gran precisión que se producen en un WebSocket y desea conocer detalles acerca de los errores, pruebe nv-websocket-client . Su interfaz de escucha tiene muchos puntos de entrada de devolución de llamada y define códigos de error de grano fino. La nueva biblioteca de cliente de WebSocket realiza correctamente el apretón de manos de cierre .

  • Web Sockets en el navegador Samsung Galaxy S3 Android?
  • Error de Firebase debido a una excepción de puntero nulo
  • Grails 2.4 Spring Websocket SockJs Java Android Cliente
  • Conexión de cliente a servidor en aplicaciones de chat como Viber o Telegram
  • Angularjs Phonegap Android usando Websockets
  • WebSocket soportado en Android Stock Browser o no?
  • Biblioteca de Android para WSS (Secure Web Socket)
  • La mejor manera de evitar los efectos del algoritmo Nagle usando webSockets?
  • Biblioteca WebSocket para Android, iOS y Flash
  • Implementación Push / Comet de servidor alternativo para el navegador de Android sin enviar mensajes de 4KB?
  • Comunicación de Android a node.js
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.