`
ijavagos
  • 浏览: 1250421 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Flash media server3 组件框架

阅读更多

最近fms 3出来了,服务器端还是 as1的。自己看到自己2005年翻译的文章。发现没有过时。和大家分享一下。Understanding the Framework

framework由600行没有文档的代码组成,毫无疑问很多开发者会开发自己的框架。

在本章,load几个.asc 文件,就在application中使用load()命令。比如:
main.asc:

load("framework.asc");
load("components/chat.asc");

一: framework的文件:
让我们看看组成framework的几个文件。这里是一个简单的描述:


components.asc load framework.asc 和其他的组件类。

framework.asc
它组成了框架。一个 gFrameworkFC 的单例就是在这里定义的。
gFrameworkFC 存储了对每一个组件实例的引用。
这个文件自动的load application.asc和 facade.asc

application.asc framework所必需的。它 对application 对象有了一些框架
需要的功能上的增强。

facade.asc

负责 服务器端组件的method routing 和 lazy instantiation 。是框架的第2个
支柱。

component.asc
是所有服务器组件类的基类。它定义了几个常用变量 (比如 prefix and callPrefix) ,处理事件转发和组件间的通信。

二: framework数据结构

framework的3个基本观点:
1 所有的东西都基于一个命名机制。
2 gFrameworkFC.components 存储了对 component classes的引用。
按照组件类型索引。
3 所有的 客户端-服务器端 的调用是通过 服务器端的Client对象。
因此被 附属在 Client.prototype或者它的一个子属性。

1 所有的东西都基于一个命名机制。
ComponentClassTypeName.ComponentInstanceName.ComponentMethodName
比如
FCChat.chat1_mc.sendMessage()

2 gFrameworkFC.components 数据结构
gFrameworkFC The global framework singleton.
gFrameworkFC.components An array indexed by component type.
gFrameworkFC.components.FCChat:
A reference to the FCChat class (extended from FCComponent).
gFrameworkFC.components.FCChat.instances:
An array of references to instances of the FCChat class.
gFrameworkFC.components.FCChat.instances.chat1_mc:
A single instance of the FCChat class named chat1_mc. This is what you can invoke methods on.

As you can see, gFrameworkFC stores the class type name first, then the instance name, and then the method name.
如果你想调用 chat1_mc实例的clearHistory( )在 main.asc中, 你使用:

gFrameworkFC.components.FCChat.instances.chat1_mc.clearHistory( )


3Client.prototype 数据结构
由于flashCom server的内部设计,所有的 client-to-server调用都需要通过服务器端的 Client对象。
因此,需要定义一种从Client到适当的组件实例的路由方法。 这种路由方法在facade.asc中定义的。
最终结果是 一堆对象 被 附着 在Client上,描述如下:

Client.prototype

The Client object's prototype,所有的client-to-server调用自动通过。通过 "_ _resolve" 机制,下面的数据结构就会 附着(attached to)在它上面

Client.prototype.FCChat
FCFactory的一个实例。 FCFactory生成类的对象并且存储到gFrameworkFC.components.FCChat.instances.


Client.prototype.FCChat.chat1_mc

FCFacade的一个实例, FCFacade类将Client对象作为第一个参数传给 方法调用,然后把这个方法 送给合适的对象。

在这种情况下,Client上面附上的变量很有迷惑性。比如,
Client.prototype.FCChat 是FCFactory 的实例 (not FCChat类).同样 Client.prototype.FCChat.chat1_mc是FCFacade的实例.

我们会在讨论facade.asc分析代码生成这种数据结构
三:framework内存管理
在一个组件实例的生命周期中,它往往要访问5种数据。
Globals。 能够被所有的用户和组件访问。 常常是 gFrameworksFC 下的一个成员。
Client globals. 用户间不同。组件间相同。 组件从 FCComponent类 继承了 getClientGlobalStorage( ) 这样在一个用户所有的地方都可以访问。比如 一个 client global 是

userColor。 对于用户来说不同。但是对于一个用户所有的组件来说相同。
Component globals.对于某一种给定类型的组件来说是相同的。它常常是组件类的静态变量(static)。比如currentSpeaker。对于很多组件实例来说是相同的。

Client locals。 对于每一个用户的每个组件来说都是不同的。组件从 FCComponent类 继承了getClientLocalStorage()方法。

Component locals.对于某个给定的组件来说,它的成员变量就是的。

四:组件的注册和实例化


五:framework方法路由
六:framework的代码祥解

framework.asc 解析。

首先。它创建了一个gFrameworkFC的对象。
这是一个单例,代表framework。
__toarray__ 用于将 obj转化为对象。

其次。它load了.application.asc和facade.asc

然后,它操作gFrameworkFC对象,
定义了 nextClientID=0,然后每来一个客户端+1。

定义了gFrameworkFC的 2个number:
clientGlobals
这个Object实际上是通过client.__ID__来做index的一个array

可以通过 getClientGlobals获得每个client的全局变量。

components,

在registerComponent时传入 name和class
gFrameworkFC.components[name] = componentClass;

然后application.addListener( componentClass )
定义了 class的 onAppStop和onDisconnect事件

注 Function的apply,call方法。
都是的第一个参数都是传入一个obj。表示在 function内部
的 this。 后面的就是方法本身需要传入的参数。apply后面
的参数是array.call是obj。
public apply(thisObject:Object, [argArray:Array]) : Void

application.asc解析。

首先,将 flash com的事件 处理
通过,gFrameworkFC.application,分发到各个 component。
这个,每个component就可以 了。

然后 ,定义FCApplication,
并且初始化 FCApplicaton的一个对象,application.

实现gFrameworkFC.application 到FCApplication
的桥梁是FCApplication中的一句话:
gFrameworkFC.application.addListener(this);

facade.asc解析。

__resolve( )是server-side提供的一个方法。当一个
obj的method找不到的时候就执行此方法。

这个用来将
The facade.asc file's job is to set up client-to-server objects that route methods from the

client-side code of a component to its server-side code.

facade的主要结构是:
定义
Client---FCFactory-----FCFacade
定义了3个的__resolve( )方法并层层调用。
这样Client最终 route成功。

component.asc
最后的一个疑惑是component.asc。 所有的客户端组件的基类。

它的代码主要的功能是用于 事件分发和组件内通信。

首先,它load framework.asc.

然后就是构造器。组件加载时执行。
FCComponent = function( derivedTypeName, derivedType )

每一个组件都是 FCComponent的一个子类。

FCChat.prototype = new FCComponent("FCChat", FCChat);

FCComponent 的构造器还创建了一个静态的obj (FCChat.instances)
和一些静态方法。比如create( ),用于创建 组件在服务器端的一个实例。

下一段代码是允许 组件范围内的 listenter.举个例子。如果你这样写,
任何FCChat的实例 的foo属性改变的时候,listObj将会被通知:
FCChat.addListener("foo", listObj);

derivedType.__LISTENERS__ [一个array实现的table]和
addListener( )和 removeListener( ) 实现了这个机制。

FCChat.__LISTENERS__ 是一个用属性名[property names]做index的array.
它的每一项都是 一个 组件实例的引用 的 array,此array
用组件的prefix来做index


举个例子,如果你想通知chat1_mc,foo 在FooComponent中
改变了,你首先查找 FooComponent.__LISTENERS__["foo"]["FCChat.chat1_mc"]
获得一个chat1_mc 的引用,然后你再调用它的 onPropertyChanged( )


如果你知道数据结构,sendUserEvent( ) 就很容易理解了。

最后FCComponent class调用gFrameworkFC.registerComponent( ).

注意,组件类的构造器不会执行。只有当 facade.asc创建了它的一个实例
,因为facade需要将一个client-to-server的方法调用传给它。

然后,component.asc 定义了FCComponent.prototype的一些方法。

代码定义了FCComponent.prototype.init( )。这个方法在组件
的构造器中调用。它初始化了很多变量,比如name, prefix, callPrefix
,这些用于 命名空间,以及server-to-client调用

然后,component.asc 定义了4个有用的方法:

getClientID( )
返回 client.__ID__

getClientGlobalStorage( )

返回每个用户的全局变量。
对于每个用户不同。但是对于每一种组件来说
是相同的。比如(username 或者 userColor).


getClientLocalStorage( )

返回每个用户的局部变量。
它相当于每一个组件实例的局部变量,
但是它附着在client对象上。


releaseLocalStorage( )
释放 客户的局部变量。内存回收。


剩下的就是事件的通知了.静态的

onWatch( ) ,addListener( ), removeListener( ), and sendUserEvent( ) 方法.
他们都是使用前面描述的__LISTENER__

唯一需要注意的是:

this.watch(prop, FCComponent.onWatch);

这就是服务器端的ActionScript 如何 观察一个 特定的
变量[watch,一种当 变量值改变时通知的方法]。
注意这里对每一个变量都只有一个watcher


总结:
为什么要组件。实际上就是将
服务器端的application的事件相应,
变成 每一个组件的事件相应。

每一个组件都可以单独而不影响的存在。

分享到:
评论

相关推荐

    flash media server帮助文档API集合

    《Flash Media Server帮助文档API集合》是一份针对Adobe Flash Media Server的重要参考资料,它包含了Flex、Flash Media Server API的PDF帮助和说明。这份资料对于开发者来说是不可或缺的工具,特别是那些致力于构建...

    Flash Media Server 2资料

    在Flash网络游戏开发方面,Flash Media Server 2 提供了强大的游戏开发框架,通过其实时流媒体和数据通信功能,开发者可以创建多人在线游戏。ActionScript 2.0结合服务器端的功能,如数据共享、实时聊天和游戏状态...

    Flash Media Server 3.5 开发的20多个例子

    3. **Flex集成**:FMS与Adobe Flex框架的紧密集成,使得构建基于Flex的富互联网应用程序(RIA)更为便捷,提供了丰富的UI组件和数据绑定功能。 4. **内容保护**:引入了数字版权管理(DRM)技术,增强了内容的安全...

    Adobe.Flash.Media.Server.3.开发者向导.简体中文版

    Adobe Flash Media Server 3 为开发者提供了一套完整的工具和框架,用于构建高质量的实时媒体应用。通过深入理解其架构和关键技术,开发者可以充分利用 FMS 3 的强大功能,创造出更具有竞争力的产品和服务。

    flex as资料

    压缩包中的"Flash Media Server 3技术指南_part1.pdf"和"Flash Media Server 3技术指南_part2.pdf"可能是关于如何配置、管理和利用Flash Media Server 3的详细指南。这些文档可能涵盖了服务器安装、设置、流媒体服务...

    流媒体技术基础,包括Windows Media、RealMedia、QuickTime、Flash流媒体

    Flash Player是其播放器,而Flash Media Server则是服务器端的解决方案。SWF文件格式是Flash流媒体的主要载体,支持FLV和F4V视频格式。Flash流媒体以其低带宽要求和跨平台兼容性而受到欢迎,尤其是在网络视频领域。 ...

    16种常用网页FLASH播放器

    4. OSMF (Open Source Media Framework):Adobe开发的OSMF是一个开源框架,用于构建自定义的Flash媒体播放器,支持多源内容和流媒体。 5. JW Flash Media Server:JW FMS提供流媒体服务,支持实时广播和点播内容,...

    Flash斗地主

    此外,Flash斗地主游戏还可能利用Flash Media Server (FMS) 进行实时通信,实现多人在线对战。FMS是Adobe提供的服务器端解决方案,它支持实时流媒体和双向音频、视频通信,适用于多人游戏、视频聊天等场景。通过FMS...

    FMS3系列(五):通过FMS实现时时视频聊天(Flash|Flex)

    在本篇博文中,我们将深入探讨“FMS3系列”的第五部分,主要关注如何通过Adobe Flash Media Server (FMS) 3实现实时视频聊天功能。这个话题对于开发交互性强、实时性高的网络应用来说至关重要,特别是对于那些需要...

    nms-radio:使用node-media-server和其他一些东西构建的网络广播

    1. **Node Media Server (NMS):** NMS是核心组件,负责处理RTMP(Real-Time Messaging Protocol)、HLS(HTTP Live Streaming)和FLV(Flash Video)流。它允许应用程序将音视频数据推送给服务器,然后由服务器分发...

    ASP.NET-[影音娱乐]网博flash流媒体直播系统v1.0.zip

    这个系统可能使用了Adobe的Flash Media Server (FMS)技术来实现流媒体的发布和播放,并且其当前版本为v1.0,表明这是一个初步完成并可以使用的版本。虽然当前的文件列表只包含了"FMS_live2.rar",我们可以推测这可能...

    网博flash流媒体直播系统 v1.0.rar

    《网博Flash流媒体直播系统 v1.0》是一款基于FMS(Flash Media Server)2.0技术构建的实时直播解决方案,专为实现局域网和广域网内的视频同步直播而设计。该系统充分利用了Adobe Flash技术的优势,提供流畅、低延迟...

    改造OpenMeetings成为Flash视频会议室(一)

    2. **Red5**:这是一个开源的Flash服务器,用于替代昂贵的FCS (Flash Communication Server)或FMS (Flash Media Server)。Red5提供实时流媒体和交互性服务,对于构建Flash视频会议室至关重要。 3. **OpenMeetings**...

    cma.rar_cma_flex

    "cma.rar_cma_flex"这个压缩包文件,显然是针对初学者提供的一份关于如何利用CMA(可能是Content Management Application,内容管理系统)和Flex在Flash Media Server (FMS)上构建视频教学平台的教学资料。...

    细细品味Flex——新Flex学习手册.pdf

    通过以上概述,《细细品味Flex——新Flex学习手册》不仅提供了ActionScript 3.0的基础语法知识,还深入探讨了Flex框架的高级特性,如组件、数据绑定、样式与皮肤、以及与Flash Media Server的集成。无论是初学者还是...

    视频聊天框架

    3. **流媒体服务器**:为了支持大规模的并发用户,需要部署流媒体服务器,如Nginx-RTMP、Wowza或Adobe Flash Media Server,它们能处理流媒体分发,实现多路复用和负载均衡。 4. **实时同步**:为确保所有参与者...

    flash-challenge:Node.js的Flash Media挑战

    在本项目"flash-challenge:Node.js的Flash Media挑战"中,我们将深入探讨Node.js、Express框架以及JavaScript在构建Web应用程序中的应用。这个挑战旨在帮助开发者掌握如何利用这些技术创建一个具备基本功能的两页...

Global site tag (gtag.js) - Google Analytics