Angularjs Phonegap Android usando Websockets

Ni siquiera sé cómo explicar esto directamente, pero lo intentaré.

Intro

Estoy construyendo una aplicación Phonegap con angularjs, y estoy tratando de coser los mensajes de WebSocket para actualizar mi interfaz de usuario. Solía ​​tener servicios que se comunican con el servidor periódicamente y cambiar sus datos en consecuencia y estaba funcionando bastante bien. Un ejemplo:

Service1.js :

var applyUpdate = function ( angular.extend(instance, data); if (!$rootScope.$$phase) $rootScope.$apply(); }; this.update = function () { DataProvider.get('getThermostatSettings', {}, applyUpdate, function(){}, true); } 

Así que básicamente estaba llamando a la función "update" cada 5 segundos, recibiendo datos del servidor y actualizando este servicio. Los controladores simplemente accederían a este servicio, y todo funcionaba.

El problema

El problema ahora, es que cosí una interfaz de WebSocket escrita en java, que maneja toda la implementación de websocket para mí. Lo tomé de: https://github.com/ziadloo/PhoneGap-Java-WebSocket . Básicamente registra una interfaz Javascript accesible desde Javascript para comunicarse con java.

Cada vez que tengo un cambio ahora, simplemente empujar una cadena del servidor a través de la WebSocket diciendo que debe actualizar, y luego llamo a la "actualización" función del servicio en mi javascript, en lugar de consultar periódicamente los datos, que es sólo estúpido.

Los WebSockets funcionan bien. Puedo ver el mensaje que viene, llamo a la actualización, se recolecta todo correctamente desde el servidor, la función "update" llama a continuación, el "applyUpdate" con los valores correctos y etc, incluso el "$ rootScope.

¡Pero todos los datos actualizados dentro del servicio angular no son visibles! Parece que todos estos cambios se están ejecutando en un hilo diferente!?!? . Sé que javascript es único subproceso, pero parece tan.

Permítanme poner esto en una mejor manera: Tengo la impresión de que tan pronto como el WebView llama a la función de devolución de llamada javascript, tengo un javascript diferente "hilo" en ejecución, y nada fuera de él se puede acceder

Más información

Escribí una función que simplemente genera un número cada 5 segundos . El websocket actualiza este número. Y mi salida es la siguiente:

 N: 1 N: 1 

Entonces, después de que el WebSocket empuja los datos con un nuevo número (2), obtengo dos impresiones:

 N: 1 N: 2 N: 1 N: 2 N: 1 N: 2 

Alguien tiene alguna indicación sobre esto? ¿Alguien intentó hacer algo similar? No soy un profesional anguloso, pero parece que todo se desordena tan pronto como recibo una devolución de llamada desde la interfaz de java.

Ya he mirado: Cambios del modelo de Angularjs después de que el empuje de los datos del websocket del servidor y mi código parece muy similar. El único problema que creo es esta devolución de llamada de Java.

Gracias

Actualización : Es un problema con AngularJS. Si establezco esta variable en una variable global de ventana, todo se asigna normalmente. ¿Es posible que Angular esté de alguna manera creando dos diferentes $ scope?

Actualización [2] : Sólo para ser un poco más claro: En el navegador, todo funciona como se esperaba. Sólo cuando lo ejecuto en el emulador que esta cosa se ensució.

Es completamente posible que Angular.js esté haciendo dos $ scope. Basta con ver la depuración en este screencast .

Puede ayudar a mostrar todos los $ escopos en la página .

También debe ser consciente de que los websockets en móviles no son la mejor idea . Los choques y los fracasos parecen ser bastante probables, basados ​​en esa charla (por un empleado de Nodejitsu con experiencia en websockets).

  • Problemas con el certificado WSS y SSL en Android
  • ¿Es posible usar WebSockets o similar con una aplicación nativa de Android?
  • Enviar flujo de audio de Android (cliente) a C # (servidor) mediante Websocket
  • Biblioteca de Android para WSS (Secure Web Socket)
  • Implementación Push / Comet de servidor alternativo para el navegador de Android sin enviar mensajes de 4KB?
  • Websocket en Android 4.4 con Phonegap
  • Detección de servicio en red local mediante WebSockets
  • Soporte de WebSocket en dispositivos móviles
  • Mensajería instantánea sobre xmpp o websocket
  • Los websockets de AndroidAsync no funcionan
  • ¿Qué biblioteca WebSocket utilizar en la aplicación para Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.