FCSFMS教程.docx

上传人:b****4 文档编号:3733092 上传时间:2022-11-25 格式:DOCX 页数:44 大小:42.04KB
下载 相关 举报
FCSFMS教程.docx_第1页
第1页 / 共44页
FCSFMS教程.docx_第2页
第2页 / 共44页
FCSFMS教程.docx_第3页
第3页 / 共44页
FCSFMS教程.docx_第4页
第4页 / 共44页
FCSFMS教程.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

FCSFMS教程.docx

《FCSFMS教程.docx》由会员分享,可在线阅读,更多相关《FCSFMS教程.docx(44页珍藏版)》请在冰豆网上搜索。

FCSFMS教程.docx

FCSFMS教程

Application类包含了有关一个FlashMediaServer应用程序实例的信息,这些信息会一直维持直至这个应

用程序实例被卸载.

先看一下在Application类中常用的方法:

Application.acceptConnection(client)     接受一个来自客户机的至一个应用程序的连接。

Application.disconnect(client)                 从服务器断开一个客户机的连接。

Application.rejectConnection(client)      拒绝至一个应用程序的连接。

Application.shutdown()                   卸载应用程序实例。

再看一下在Application类中常用的属性:

Application.clients     一个对象,该对象包含了当前连接到这个应用程序的所有客户的一个列表。

Application.name      一个应用程序实例的名字。

最后看一下在Application类中常用的事件:

Application.onAppStart             当这个应用程序被服务器装载时调用。

Application.onAppStop             当这个应用程序被服务器卸载时调用。

Application.onConnect             当一个客户机连接到这个应用程序时调用。

Application.onDisconnect       当一个客户机从这个应用程序断开连接时调用。

(这些是比较常用的,还有其它一些,大家可以看FMS自带的文档)

我们来描述一下客户机连接的流程:

1.当第一个用户连接的时候,会启动服务端应该程序实例,这样就会触发Application.onAppStart事件,通常我们会里这个事件里做一些初如化的事情.

2.用户连接的时候会触发Application.onConnect事件,在这个事件里我们可以用Application.acceptConnection()方法来接受这个用户的连接,也可以用Application.rejectConnection()方法拒绝这个用户.

3.服务器想把一个用户断开的时候,可以用Application.disconnect()方法,当一个用户断开,不管是服务器把它断开,还是客户端自己断开,都会触发Application.onDisconnect事件.

4.使用Application.shutdown()方法可以卸载应用程序实例,当这个应该程序长时间(大概半个小时左右)没有客户端连接的时候,应该程序也会被卸载,当应该程序卸载的时候会触发Application.onAppStop事件.

我们写FMS程序时,大多数都是这样的流程.

FMS3和FMS2一个不同的地方

前段时间装了FMS3,一直都没有正式用过,今天拿以前用FMS2写的一个斗地主程序在运行时总是出问题,找了半天原因,终于找到了,之前用了这样一句代码

client.id=userObj.id;

这里的client就是客户端对像,client本身是有一个id属性的,在2.0中我们可以对它赋一个值,如果不赋值系统会自动对它赋一个值,如果赋了值就是这个值了,但3.0不行,这个id已经不能赋值,就算赋个值,也改不过来.所以在FMS3.0环境中不能对这个id属性赋值

得到一个经验就是不要去使用这个id属性,不然FMS2和程序也不能很好转到FMS3里面去了.

 

FCS/FMS教程

FMS/FCS,Flex/FlashGgNET03月4th.2008,3:

38am

1、开始

一、FlashCom开发所需安装的软件和硬件:

1.FlashMXauthoring

2.FlashMXCommunicationServer

3.ActionScripteditor(笔者推荐editplus)

4.FlashPlayer

5.CameraandMicophone

二、设置开发环境

1.确保FlashComserver已经启动

2.更改运行FlashComServer的URL地址

new_nc.connect(’rtmp:

/video/room_01′);//本地服务器

或者使用

new_nc.connect(’rtmp:

//

如果使用simpleconnect组件,直接在组件的属性中设置即可

3.指定发布格式

一般为html和swf

4.书写client-side的as脚本,一般写在第一帧

5.书写server-side的asc脚本,一般为main.asc或组件对应的app_name.asc

6.加载组件,如果使用默认的组件,可以通过下面的语句简单加载

load(’components.asc’);//该文件在scriptlib目录下面

7.初始化client-side代码.给第一行添加下面代码

#include‘Netdebug.as’

以便进行NetConnection调试(ps.新版的FlashComServer已经不包含netdebug.as文件,需要安装FlashRemote)

8.监视应用程序

通过FlashCom自带的应用程序管理器和管理工具来监控和管理[中文版见这里]

三、大致开发步骤

1.设定应用程序目录并在服务器端注册

在服务器端的application目录下建立相应的子目录就可以了(也就是项目main.asc文件所放置的目录了)记住服务器端的任何改动都需要重启FlashComServer才能生效

2.在客户端建立链接

my_nc=newNetConnection();

my_nc.connect(’rtmp:

//

3.保存客户端的fla文件到任何地方(如果涉及后台交互的话建议保存在webserver目录下)

4.如果包含client端需要相应的server端的asc文件,请拷贝到server端的相应目录(建议保持和客户端相同的文件名,而只是后缀不同)

5.然后发布你的swf文件并运行

默认的服务器端asc文件存储位置在C:

\Programfiles\Macromedia\Flash

CommunicationServerMX\applicationsinWindowsor/opt/macromedia/flashcom/applications

onUNIX.当你需要创建一个communciation应用程序时,就需要在applications下面建立子目录,存放下面的数据文件:

asc服务器端通信文件

flv数据流播放文件

fso远程共享对象数据文件

客户端的swf和html(或者php等服务器文件)可以放在你指定的任何目录,在产品发布的时候需要移走fla源文件。

每一个应用程序的实例也位于不同的目录,如:

代码

my_nc.connect(’rtmp:

//

my_nc.connect(’rtmp:

//

如果没有指定实例,客户端实际上连接到一个默认的名为_defInst_的实例,可以对不同的实例建立不同的共享对象

代码

//Oneinstanceofapplication’support’

first_nc=newNetConnection();

first_nc.connect(’

first_so=SharedObject.getRemote(’CustomerInfo’,first_nc.URI,false);

first_so.connect(first_nc.URI);

//Anotherinstanceofapplication’support’

second_nc=newNetConnection();

second_nc.connect(’

second_so=SharedObject.getRemote(’CustomerInfo’,second_nc.URI,false);

second_so.connect(second_nc.URI);

四、在FlashCom中使用的文件类型

1.ASC和JS文件服务端使用的文件类型

FlashCommunicationServer在服务端的scriptlib目录下提供了一个脚本库,包含了一些组件和FlashRemotingservices.的server端脚本

2.FLV和IDX文件视频播放文件和索引文件

3.SOL,SOR和FSO文件共享对象数据文件(依次为Local、Remote和两者)

2、连接示例

首先确保服务器已经启动,在windows下面可以直接启动服务就可以了。

在Linux下面需要运行serverstart命令启动。

在客户端写代码打开连接

my_nc=newNetConnection();//创建连接对象

my_nc.connect(targetURI);//连接服务器

参数格式为:

其中实例名可以省略

rtmp:

//localhost:

port/appName/instanceName//本地服务器

也可以省略前面的直接写成

rtmp:

/appName/instanceName

rtmp:

//host:

port/appName/instanceName//远程服务器

注意协议类型一定要使用rtmp,否则会连接失败

下面是一个简单的实现方法:

1:

//获取和设置摄像头

2:

client_cam=Camera.get();

3:

Live_video.attachVideo(client_cam);

//建立远程连接

1:

functiondoConnect(){

2:

client_nc=newnetConnection();

3:

client_nc.onStatus=function(info){

4:

trace(’Level:

‘+info.level+‘Code:

‘+info.code);

5:

}

6:

client_nc.connect(’rtmp:

//localhost/doc_connect/room_01′);

7:

}

//发布视频流

1:

functionpublishMe(){

2:

out_ns=newnetStream(_root.client_nc);

3:

out_ns.attachVideo(client_cam);

4:

out_ns.publish(’myTestStream’);//采用默认的live播放形式

5:

}

//播放视频流

1:

functionplayMe(){

2:

in_ns=newnetStream(_root.client_nc);

3:

Published_video.attachVideo(in_ns);

4:

in_ns.play(’myTestStream’);

5:

}

定义好这些函数后,就可以用下面的代码简单实现

1:

//Connecttotheserver

2:

doConnect();

3:

//Publishthelivestream

4:

publishMe();

5:

//Playbackthestreamfromtheserver

6:

playMe();

3、数据流

FlashCommunciationServer包含了server端(由一些asc文件组成)和client端(swf文件)

server端和client端的数据传输通过Real-TimeMessageProtocol(RTMP)进行实时交流,webserver通过http服务把内容提供给client端,实现模式如下图:

多用户可以连接到同一个应用程序Application

FlashCommunciationServer实际上为不同的用户之间提供了相互交流的通道。

基于客户/服务器模式的application,服务器端主要负责数据的传输,由客户端发送请求,服务器端执行数据查询和计算并返回结果值给客户端,通常需要保持长时间的连接。

FlashCommunciationServer提供了两种方法控制用户的更多交互:

数据流和共享对象.

数据流是指在服务器端和客户端同步传递的音频、视频和其它数据的信息流,数据流可以通过简单的发布和订阅方式实现。

一个发布的数据流可以实时的被看到(如视频聊天室),

也可以被录制下来以后播放。

录制的数据流被存为FlashVideo(FLV)格式,其中可以包含文本、音频和视频等信息。

当然你也可以把存在的通过第三方的软件录制的视频和音频文件转换为flv格式的文件。

4、共享对象

在FlashCom开发过程种可以使用两种共享对象:

本地和远程共享对象。

本地共享对象可以看作是Flashcookie,可以在用户的本地机器存放用户数据,其本身为Flashplayer提供,可以无须FlashComServer的支持。

远程共享对象是由FlashComServer来管理的,提供了信息和数据的同步,以及数据的存储。

Flash客户端连接、提交给远程共享对象,并且与服务器端保持同步。

信息数据还可以发布到所有连接到远程共享对象的客户端,并通过应用程序的session或临时文件持续。

更多的信息请参考共享对象类。

连接外部数据源

根据FlashCom的数据流和共享对象提供的交流模型,FlashComServer还可以和外部数据源交互,例如web服务器、关系数据库,甚至其它的FlashComServer应用程序。

例如,你可以写一个服务器端的脚本文件来连接一个web服务器或ColdFusion应用程序来接收一串用户名和电话号码的列表,然后把查询结果写入共享对象。

详细的方法后面的章节会描述。

创建和开发应用程序的流程

你可以使用FlashMX创作工具来创建应用程序的客户端组件,生成的swf文件提供了应用程序的用户界面,其中也包含了与FlashComServer连接和控制的as脚本。

服务器端则需要相关的应用程序目录,其中包含了运行客户端所需要的asc脚本,提供多个客户端之间逻辑控制和数据交换。

在开发应用程序的过程种,客户端程序需要发布到合适的位置以保证应用程序的正常运行,这通常要结合WebServer,如html、php、asp等,因为FlashComServer采用rtmp协议,所以webserver并非必须,你可以直接在swf文件中执行,但不推荐这样做。

服务器端程序(包含asc、flv等文件)需要放置到正确的应用程序目录下面。

如果你是一个FlashComServer管理员,你可以使用管理控制台来配置FlashComserver、设置系统安全、监视使用情况,停止和重启server,还可以添加用户。

这需要用来第一章提到的应用程序管理器和管理工具

5、应用示例

下面内容主要讲述如果用如何通过客户端连接服务器,怎样访问共享对象,以及调用远程方法等。

当用户使用客户端的swf文件连接服务器时,服务器会加载应用程序,如果没有运行就创建实例。

服务器端接受连接之后,产生一个新的客户端对象回应该客户端应用程序,执行指定的服务器端脚本。

客户端需要做的是初始化数据流和共享对象等

连接流程

当客户端开始连接服务器后,服务器端会调用onAppStart方法(确保应用程序实例已经处于运行状态)

接下来,服务器端会回调客户端定义的onConnect方法,该方法的逻辑决定了是否接受该连接请求。

当客户端断开连接的时候,会调用服务器端的onDisconnect方法;当应用程序结束后,会调用onAppStop方法

远程方法调用

在连接成功之后,客户端可以调用服务器端组件定义的方法,服务器端也可以调用客户端组件中的方法。

每一个连接到服务器端的应用程序都作为一个服务器端的客户对象实例,每一个客户端的实例对象都可以通过NetConnect对象调用远程服务器的方法,然后服务器端可以回应并返回值给客户端。

下面的图表示了在客户端调用服务器端方法并获取返回值的方法:

从服务器端回调客户端的方法

从服务器回调客户端的方法比较类似于上面所说的。

在客户端,可以给NetConnect对象的实例自定义方法,在服务器端可以利用client.call的方式调用客户端的方法。

图示即为从服务器调用客户端并返回值的方法。

共享对象的使用

共享对象简化了在多用户之间共享数据的开发工作,一个Flash客户端要获取远程共享对象可以通过SharedObject.getRemote来指定连接,

然后通过SharedObject.connect连接远程共享对象,一旦连接成功,服务器端会发送同步信息给各个连接的客户端,客户端使用SharedObject.onSync来保持同步,下面的图简单描述了其使用过程。

6、对象概述

MacromediaFlashCommunicationServerMX1.5提供了两部分API,即客户端API和服务器端API。

本章主要讲述客户端API和服务器端API是怎样使用的。

也会涉及到共享对象的讨论,怎样存储关于应用程序和用户的相关信息。

概述FlashMXComServer的核心对象之后,我们也会重点描述一些类的细节内容,例如Camera,Microphone,NetStream,Stream,System和Video对象以及关于如何优化应用程序、保护客户端对象和使得NetConnection对象更安全。

客户端API提供了:

Camera(摄影机),Microphone(麦克风),NetConnection(联机),NetStream(串流),SharedObject(共享对象)和Video(视频).服务器端API提供了下面这些对象:

Application(应用程序),Client(客户端),NetConnection(联机),SharedObject(共享对象)和Stream(串流).

客户端对象

下面的对象只能用于客户端的as脚本中

Camera对象:

允许你从摄影机捕捉视频并追加到任何一个MC中,当使用FlashMxComserver的时候,还可以在联机对象间传输、显示,甚至录制捕捉到的视频。

应用这个特性,你可以开发例如视频会议、视频聊天等应用程序。

Microphone对象:

该对象用于取得麦克风的声音来源,并且可以在联机对象之间传输、播放等,可以开发例如语音聊天之类的应用程序,如果不使用联机对象,也可以把声音通过音箱在本地输出。

NetConnection对象:

允许Flash客户端通过TCPsocket与FlashComServer建立连接,并且使用RTMP(Real-

TimeMessagingProtocol,实时讯息通讯协议)交互数据。

NetStream对象:

在使用Netconnect对象所建立的联机对象上,进行数据、声音和视频信息的传输,就如同NetConnect的通道一样。

可以使用NetStream.publish方法来发步数据流,使用NetStream.play来播放接收到的数据流。

Localshared对象:

记录用户的资料,或者把讯息实时传递给所有联机用户。

Video对象:

用于显示通过NetStream.play方法或Camera.get方法捕捉到的视频流。

并通过Video.attachVideo方法把该视频对象放置到flash的舞台。

服务器端对象

Application对象:

包含应用程序实体的信息与状态,直到程序结束为止。

Application对象也可以让程序决定是否接收用户的联机或者关闭用户的联机,以及清除应用程序特定的流、清除在服务器端的共享对象,并让你在有效范围内访问整个应用程序的变量、定义相关事件所执行的函数等。

Client对象:

包含每个联机用户的信息,例如客户端的IP地址、Flash的版本信息、分配用户的频宽,或者呼叫客户端定义的方法等。

NetConnection对象:

可以在应用程序实体和服务器端,或者同一台服务器的另外一个应用程序之间创建一种双向的连接。

你甚至可以使用服务器端的NetConnection对象来创建更强大的应用程序,例如你可以获取天气信息从另一个应用程序服务器或者和其他的Flashcom服务器及应用程序实体共享加载。

使用联机对象,你可以使用标准的http协议或者rtmp协议在服务器之间交互和传递数据。

Remoteshared对象:

远程共享对象是在客户端建立的,但是可以在服务器端仍然可以使用,它可以实时地在客户端的多个应用程序之间共享和存储数据

SharedObject对象:

作用和客户端建立的远程共享对象一样,让不同联机用户能够通过服务器端的共享对象实时分享信息。

不过所提供的方法和客户端的有所区别。

例如,读取服务器端的共享对象要用get方法,设定存储资料不用data属性,而使用setproperty和getProperty方法,另外还有暂时锁住和解锁的方法lock和unlock,防止资料会覆写。

Stream对象:

处理影音串流,传回录像文件的时间秒数、呼叫客户端串流对象中的自定义方法、以及播放与录像等方法。

客户端和服务器端的对象交流

某些对象的方法是可以在客户端或者服务器端建立和相互调用。

例如当客户端的NetConnect对象联机到服务器端,服务器端的Netconnect对象同时也建立了,这个对象可以调用客户端NetConnect对象的副本的所有方法。

下面的表格显示了对应的调用关系

客户端对象

my_nc(NetConnectionobject)

my_ns(NetStreamobject)

my_so(remotesharedobject)

回应的服务器端对象

my_client(Clientobjectorapplication.clientsobject)

my_server_stream(Streamobject)

my_server_so(server-sidesharedobject)

下面表示了客户端的调用和服务器端的回应

客户端的调用

my_nc.connect

my_nc.close

my_nc.call(’doThing’,myCallbackFcn,1,‘foo’)

my_so.send(’doThing’,1,‘foo’)

服务器端的回应分别对应为

application.onConnect

application.onDisconnect

my_client.d

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1