2011-02-27 10 views
13

Tengo una aplicación que usa objetos compartidos remotos y estoy viendo un comportamiento extraño. Estoy escribiendo una aplicación de ActionScript en AS3 usando Flash Builder y conectándome a Wowza Media Server 2.No recibir eventos de eliminación onSync para múltiples objetos compartidos en el mismo archivo SWF

Mi aplicación está funcionando bien, pero ahora estoy tratando de escribir pruebas unitarias para ella utilizando FlexUnit. Las pruebas de mi unidad implican la creación de conexiones múltiples al mismo SharedObject remoto y me aseguro de recibir las actualizaciones correctamente. Todo parece funcionar bien, excepto que no recibo ninguno de los eventos SyncEvent.SYNC con un info.code de "eliminar". Cuando ejecuto mis aplicaciones de forma independiente en pestañas separadas o incluso archivos SWF separados incrustados en la misma página, funciona bien. Por alguna razón, aunque no funciona cuando está dentro de una unidad de prueba. También he descubierto que si cargo los swfs usando un Loader dentro del mismo SWF, obtengo el mismo comportamiento. Me parece algo extraño sobre la forma en que se comportan los múltiplos del mismo SharedObject dentro del mismo SWF. He tenido que evitar otros comportamientos extraños en las pruebas unitarias, como los antiguos valores que tampoco se configuraron correctamente en los eventos onSync.

¿Alguien tiene alguna idea de cómo puedo evitar esto? ¿Es esto un problema conocido? ¿Estoy loco? :)

¡Agradecería cualquier ayuda!

+0

¡No estás loco! Hoy me pasó lo mismo, perdí 8 horas al descubrir que esto sucede. Estaba usando más referencias a un SO remoto y cuando eliminé el detector de eventos, los eliminé a todos, o cuando cerré una referencia a SO, cerré todos ... SharedObject parece tener errores muy sencillos. –

+0

Me doy cuenta de que este es un hilo viejo, pero es 2016 y me aparece este problema. ¿Se resolvió esto alguna vez? – Visualife

Respuesta

0

También me enfrenté a este problema antes cuando estaba trabajando en una aplicación Flex utilizando algunos marcos de codificación como Cairngorm, y conectando a AMFPHP con múltiples objetos remotos.

En ese momento, lo que se me ocurre para resolver el problema es asegurarme de que esos objetos remotos no se disparen al mismo tiempo. Eso es intentar hacer una llamada "cadena secuencial" para disparar esos objetos remotos uno tras otro.

Para lograr esto, puede ser difícil si lo hace desde cero, puede considerar utilizar el moderno marco ActionScript 2.0 para ayudarle (por ejemplo, SWIZ o Robotlegs). Esto puede ser demasiado complejo de manejar desde el principio. Sugiero que solo coloque las partes del objeto remoto para que las maneje el marco mientras mantiene otras cosas intactas.

0

Para obtener su instancia sharedObject, está utilizando el método estático SharedObject.getRemote(). Creo que este método siempre devolverá la misma instancia para un nombre dado (y si el parámetro de persistencia tiene el mismo valor).

Puede tener el mismo tipo de problema cuando elimina un SharedObject de su aplicación (mySO = null) y lo reinstala antes de que el recolector de basura hiciera su trabajo).

Este tipo de comportamiento tiene sentido para mí, pero a veces debo admitir que es un problema. De todos modos, debería ser fácil de probar en una sesión de depuración (Eche un vistazo al número de instancia de su objeto).

Ahora, hablando de pruebas unitarias, ¿qué estás probando? El comportamiento de SharedObjects? Si es así, creo que hay una idea errónea aquí. Si realmente desea probar este tipo de comportamiento (y me interesaría saber el motivo), entonces supongo que necesitará algunas pruebas más complejas que ejecuten dos aplicaciones por separado.

Espero que ayude!

0

Tuvimos un comportamiento similar con las eliminaciones en nuestro proyecto. Cuando llamamos a so.close(). Luego borre alguna clave en el objeto compartido. Luego, vuelva a conectar SO: aún verá la clave eliminada con vida.

Soluciones: no cierre SO o actualice las claves borradas con algunos valores de constantes (-2 por ejemplo) para marcarlas eliminadas.

Se usó Wowza 3.

Cuestiones relacionadas