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 .

  • Servicios WebSocket de Android que realizan varias conexiones
  • Biblioteca de Android para WSS (Secure Web Socket)
  • ¿Soporta Android 3.0 WebSockets?
  • Angularjs Phonegap Android usando Websockets
  • Web Sockets en el navegador Samsung Galaxy S3 Android?
  • Websocket Server Android
  • ¿Alguien ha escrito una librería de Android para Pusher?
  • Detección de servicio en red local mediante WebSockets
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.