Desarrollando Aplicaciones
From Red5Tutorials
Flash
Observaciones: RED5 no es enteramente igual a FCS, pero fundamentalmente hace cosas similares. Los siguientes temas de ayudarán a comprender mejor esta tecnología.
(Basado en la docuemntación adjunta de Red5 de1 1 de Abril 2007)
En Red5 tanto el modelo Scope, como el de contexto es una extensión del modelo de FMS. Por lo tanto funcionalidades de este modelado no están disponibles en FMS. El Concepto de Scope
Todos los recursos disponibles de Red5 están localizados en un árbol con estructura jerárquica. A cada nodo de ese árbol se le denomina scope. Si el nodo no tiene hijos se le denomina BasicScope y si el nodo contiene otros nodos a su vez se le denomina simplemente Scope. Por defecto hay dos BasicScopes predefinidos en Red5: SharedObject Scope y BroadcastStream Scope (Scope de objetos compartidos y Scope para publicación de streams).
Cada aplicación tiene su propia jerarquía de Scopes y el Scope raíz de toda aplicación es llamado WebScope. También hay un Scope diseñado para compartir información y recursos entre todas las aplicaciones llamado GlobalScope. GlobalScope está situado en la jerarquía como padre de todos los WebScopes y se le ha llamado "default".
El resto de nombres de los Scopes están directamente relacionados con los nombres de los elementos que se asocian a cada Scope. Por ejemplo un Scope es 'bautizado' por el nombre del contexto de la Aplicación dependiendo del 'path', un Scope de un objeto comapartido tomará el nombre del propio objeto compartido y el Scope de BroadCastSream lo cogerá del nombre del Stream.
El cliente puede conectarse a todos los Scopes excepto a GlobalScope y BasicScopes. Un Objeto Scope se crea como resultado de un request de conexión de un cliente.
Por ejemplo si un cliente realiza un request para conectarse a 'oflaDemo/room0' y el Scope room0 no existe previamente, después del establecimiento de la conexión se crea 'room0'. Si la URL de conexión tuviera más de un Scope intermedio, todos los Scopes se crearían. Otro ejemplo, si el cliente se conectara a 'oflaDemo/lobby0/room0' se crearían los Scopes 'lobby0' y 'room0' quedando la conexión asociada al Scope 'room0'.
Una estructura típica de Scopes podría ser la siguiente:
GlobalScope(default) --> WebScope(oflaDemo) --> Scope(room0) --> BroadcastStream(live0), SharedObject(so1)
--> Scope(room1) --> SharedObject(so0)
--> WebScope(fitcDemo) --> Scope(room1) --> BroadcastStream(live0)
Para versiones completas de Red5, el objeto 'global scope' se define en 'webapps/red5-default.xml'. Para servidores Red5 lanzados a través de archivos WAR, el objeto 'global scope' se define junto al objeto 'web scope' en 'conf/war/applicationContext.xml'. Para qué sirve un Scope
Aparte de poder navegar por la estructura jerárquica de las aplicaciones, los objetos Scope nos facilitan la gestión de los recursos y el control sobre la actividad de la aplicación. Los objetos Scopes también gestionan un conjunto de objetos conectados a él. Un 'Scopehandler' o controlador Scope puede asociarse a un Scope, de forma que nos permite comunicarnos con ellos y viceversa. La actividad del Scope puede ser monitorizada y nos permite conocer detalles y eventos sobre su creación, destrucción y conexiones de un determinado Scope. Qué es un Contexto
El contexto viene delimitado totalmente por el Scope y aporta al objeto Scope algunos servicios adicionales. El objeto 'Context' puede obtenerse llamando al insterfaz IContext.getScope(). El objeto 'Context' encapsula la variable 'context de la palicación Spring de modo que los servicios pueden ser definidos como beans de Spring y ser vistos desde el objeto 'Context'. Otros servicios como "clientRegistry", "serviceInvoker", "persistenceStore", "mappingStrategy" y el gestor de recursos deberán controlarse mediante los métodos disponibles del objeto 'Scope'.
El objeto 'Context' puede ser heredado. Esto quiere decir que un Scope no puede definir un contexto propio y usar su contexto padre directamente. Sólo GlobalScope y WebScope usan su propio objeto 'Contex'.
(+ info sobre Context en org.red5.server.api.IContext)
**NetConnection() **SharedObject() **NetStream()

