读书人

FMS3系列(6):使用远程共享对象(Share

发布时间: 2013-01-06 15:44:48 作者: rapoo

FMS3系列(六):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)

FMS开发中,经常会使用共享对象来同步用户和存储数据。对于实现广播文字信息实现聊天的支持非常强大,还可以跟踪用户的时时动作,在开发Flash多人在线游戏中的应用也非常广阔。

??????在使用FMS开发共享对象时需要注意,只有使用Flash Media Interactive Server或Flash Media Development Server这两个版本时才能够创建和使用远程共享对象,来实现多客户端的应用程序之间共享数据。如果是使用的Flash Media Streaming Server版FMS是不能创建远程共享对象的,只能创建本地共享对象,类似于传统Web开发中的Cookie。

??????使用共享对象(SharedObject)来开发时时文字聊天其实是很简单的,SharedObject可以跟踪和广播消息,连接到SharedObject中的其中任何一个客户端改变了SharedObject中的数据,SharedObject就会将最新的数据广播到连接到它的所有客户端。从某种角度可以理解为远程的SharedObject是一个同步很多用户的一个网络中心。下图为官方发布的SharedObject广播消息图:

??????????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)

??????

??????本文是通过实现一个简单的文字聊天来介绍FMS中的远程共享对象的使用,首先在FMS中建立好应用程序名,既在FMS的安装目录下的applications下建立一文件夹,来作为共享对象应用程序使用,如下图所示:

??????????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)

??????如上图,SharedObjectApp就是为实现聊天建立的一个FMS应用文件夹,其下的sharedobjects/_definse_为成功创建远程对象后自动生成的目录。如果你所创建的为永久性的远程共享对象,则在该目录下还将会有一个以.fso为扩展名的远程共享对象文件。

??????要创建远程共享对象,首先需要连接到FMS应用,然后通过SharedObject.getRemote()方法来完成远程共享对象的创建,通过给远程共享对象添加同步事件监听,远程共享对象里的数据一但发生改变就会自动触发该事件,来实现同步数据。

FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)<?xml?version="1.0"?encoding="utf-8"?>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)<mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"?layout="absolute"?fontSize="12">
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????<mx:Script>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????<![CDATA[
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????import?mx.controls.Alert;
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????import?mx.collections.ArrayCollection;
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????import?flex.VO.Message;
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????private?var?nc:NetConnection;
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????private?var?so:SharedObject;
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????private?function?onClick():void
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash){
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????nc?=?new?NetConnection();
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????nc.connect("rtmp://192.168.1.101/SharedObjectApp");
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????}
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????private?function?onNetStatusHandler(evt:NetStatusEvent):void
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash){
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????this.panChat.title+="("+evt.info.code+")";
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????if(evt.info.code=="NetConnection.Connect.Success")
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash){
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????//创建一个远程共享对象
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????//参数:远程共享对象的名称?|?连接到的应用程序的URI?|?远程共享对象是否为永久远程对象
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????so?=?SharedObject.getRemote("RemotingSO",nc.uri,true);?//将生成SO.fso
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????//远程对象(SharedObject)同步事件的监听
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????so.addEventListener(SyncEvent.SYNC,onSyncHandler);
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????//远程共享对象连接到服务器
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????so.connect(nc);
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????}
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????}
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????private?function?onSyncHandler(evt:SyncEvent):void
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash){
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????if(so.data.msgCollection!=null)
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash){
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????var?tempCollection:ArrayCollection?=?new?ArrayCollection();
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????convertArrayCollection(tempCollection,so.data.msgCollection?as?ArrayCollection);
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????this.msgText.text="";
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????for(var?index:int=0;index<tempCollection.length;index++)
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash){
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????????var?message:Object?=?tempCollection.getItemAt(index);
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????????var?displayMessage:String?=?message.NickName+"说:"+message.Context;
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????????this.msgText.text?+=?displayMessage?+?"\n";
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????}
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????}
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????}
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????private?function?onSend():void
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash){
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????var?tempCollection:ArrayCollection?=?new?ArrayCollection();
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????if(so.data.msgCollection?!=?null)
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash){
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????????convertArrayCollection(tempCollection,so.data.msgCollection?as?ArrayCollection);
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????}
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????var?msg:Message?=?new?Message();
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????msg.NickName?=?this.txtUser.text;
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????msg.Context?=?this.txtMessage.text;
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????tempCollection.addItem(msg);
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????//更新远程共享对象中的属性值
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????so.setProperty("msgCollection",tempCollection);
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????????this.txtMessage.text="";
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????}
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????private?function?convertArrayCollection(arrNew:ArrayCollection,arrOld:ArrayCollection):void
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash){
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)?????????????????arrNew.removeAll();
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)??????????????
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)?????????????????for(var?i:int=0;i<arrOld.length?;i++)
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)?????????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash){
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)??????????????????????arrNew.addItemAt(arrOld.getItemAt(i),i);
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)?????????????????}
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????}
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????]]>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????</mx:Script>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????<mx:Panel?x="22"?y="22"?width="482"?height="260"?layout="absolute"??id="panChat"
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????title="文字聊天">
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????<mx:TextArea?x="0"?y="0"?width="100%"?height="100%"?backgroundColor="#FCDADA"?id="msgText"/>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????<mx:ControlBar>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????<mx:TextInput?width="53"?id="txtUser"/>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????<mx:Label?text="说:"/>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????<mx:TextInput?width="195"?id="txtMessage"/>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????<mx:Button?label="Send"?click="onSend()"/>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????????<mx:Button?label="Connection"?fontWeight="normal"?click="onClick()"/>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????????</mx:ControlBar>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????</mx:Panel>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)????
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)</mx:Application>
FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)

?

??????程序运行截图如下:

????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)

??????????????????????????????????????????????????图1----FMS状态图

????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)

????????????????????????????????????????????????图2----聊天客户端(张三)

????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)??????

??????????????????????????????????????????图3----聊天客户端(李四)

????????????FMS3系列(6):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)

?

??????如上图,在FMS应用目录下创建了一后缀为.fso的文件,这就是永久性的远程共享对象文件名。在使用远程共享的时候,根据实际需求来确定是否使用永久性的远程共享对象,一般做聊天应用我个人建议使用临时远程共享对象(不生成.fso文件),要存储聊天记录可以通过其他方式来保存。

??????详细大家可以查看官方提供的文档,在FMS的安装目录下就有,我的是D:\Adobe\Flash Media Server 3\documentation\flashmediaserver_AS3LR\index.html

?

??????本文就介绍于此,如文中有什么问题,请大家拍砖指正。本文示例源代码下载

读书人网 >Flash

热点推荐