Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象)
本篇是视频聊天,会议开发实例系列文章的第1篇,该系列所有文章链接如下:
http://www.cnblogs.com/aierong/archive/2008/12/30/Flex.html#sp
1.了解
关于Flex和Fms3的解释可以看
http://www.cnblogs.com/aierong/archive/2008/12/30/flex1.html
2.开发准备
Flex的开发工具(ide):Flex builder 3的安装可以看
http://www.cnblogs.com/aierong/archive/2008/12/26/MyCrack.html
Fms3
adobe官方站提供了最大10个连接数的免费开发版(零售版为4500美元)
实在找不到可以留言给我
安装fms3时,一路next ,中间会要你输入序列号,不输入就是免费的开发版,最后安装结束前会要你输入以后进入fms后台管理的账号密码,比较重要,不要乱输。
Flash Player Debug(Flash Player调试版)
在Flex builder 3的Debug模式下调试代码用的,adobe官方站提供了免费下载
3.了解SharedObject对象
一旦sharedObject 对象中的数据(即聊天记录)被任何一个client 所修改,那么fms 会把当前的sharedObject 中的最新聊天记录发送给所有的client (广播),使得client 聊天窗口中显示的数据刷新。
4.开始code
具体步骤:
(1)fms安装目录下,找到application文件夹,下面已经有2个目录了,不管它,在application再新建一个文件夹test_myApp,这个就相当于我们聊天室服务端工程的根目录了(以后的sharedObject 对象就是存放于此)
(2)启动fms
在安装目录下,找到tools文件夹,点击StartServerService.bat就可以启动fms。该文件夹内还有一个StopServerService.bat是停止fms的
其实启动fms也可以去windows的开始菜单里面,Start Adobe Flash Media Server 3.0.1和Start Flash Media Administration Server 3.0.1
(3)登录fms
在安装目录下,找到fms_adminConsole.swf,点击后,输入安装时填写的用户名和密码,即可登录成功
(4)打开Flex builder 3,建立一个flex project,程序类型是web类型(便于调试)
(5)在主mxml中拖动控件,界面如下:
具体代码如下:
<mx:TextArea x="33" y="10" height="159" width="366" id="txt_content"/>
<mx:TextInput x="33" y="177" width="62" id="txt_nickname"/>
<mx:Label x="103" y="179" text="说"/>
<mx:TextInput x="146" y="177" width="185" id="txt_message"/>
<mx:Button x="334" y="177" label="send" id="btn_send"/>
(6)
开始在<mx:Script>
<![CDATA[
]]>
</mx:Script>
标签组内编写代码
导入包和定义变量如下:
import mx.collections.ArrayCollection;
import mx.controls.Alert;
private var myNetConnection:NetConnection;
private var serverApp:String ="rtmp://192.168.0.249/test_myApp";
private var talk_so:SharedObject;
myNetConnection :flex 与fms 链接用的对象
serverApp :定义了fms 服务的地址使用的是rtmp 协议,ip 加上server 工程根目录
talk_so:fms 下的SharedObject 对象
(7)定义聊天记录对象Message
package vo
{
public class Message
{
public function Message()
{
}
public var nickname:String;
public var msg:String;
public var time:Date;
}
}
所有的聊天记录都是被存放在一个名为msgList 的集合对象中。每条聊天记录,我是专门定义了Message 对象的
(8)定义一个方法,用于交换数组中元素
private function convertArrayCollection(arrNew:ArrayCollection,arrOld:ArrayCollection):void
{
arrNew.removeAll();
for(var i:int=0;i<arrOld.length ;i++)
{
arrNew.addItemAt(arrOld.getItemAt(i),i);
}
}
(9)定义界面字体大小为12(中文要大小为12才显示得比较清楚),初始方法为init
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" creationComplete="init()">
(10)实现init()
private function init():void
{
btn_send.addEventListener(MouseEvent.CLICK,btnSenClickHandler);
myNetConnection = new NetConnection();
myNetConnection.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
myNetConnection.connect(serverApp);
}
代码说明:
给按钮添加鼠标点击事件btnSenClickHandler
初始化NetConnection
给myNetConnection添加netStatus事件netStatusHandler
(11)实现netStatusHandler
private function netStatusHandler(evt:NetStatusEvent):void
{
trace(evt.info.code); //调试代码用
if ( evt.info.code =="NetConnection.Connect.Success" )
{
talk_so = SharedObject.getRemote("talk",myNetConnection.uri,true);
talk_so.addEventListener(SyncEvent.SYNC,talkSoSyncHandler);
talk_so.connect(myNetConnection);
}
else
{
Alert.show("链接失败"+evt.info.code);
}
}
代码说明:
在NetConnection对象报告其状态或错误条件时调度netStatusHandler。
netStatus 事件包含一个 info 属性,该属性是一个包含事件特定信息(例如,连接尝试成功还是失败)的信息对象。
如果与fms 连接成功后就开始初始化remote SharedObject 对象
SharedObject.getRemote()说明:
SharedObject.getRemote() 以创建一个在服务器上永久保留的远程共享对象,如电话簿。 每次客户端对共享对象进行更改时,修改后的数据可供当前或以后连接到该对象的所有客户端使用。 如果还在本地永久保留了该对象,并且客户端在未连接到服务器时更改了数据,下次客户端连接到远程共享对象时,则会将数据复制到该对象。
若要创建远程共享对象,请调用 getRemote(),然后调用 connect() 以将远程共享对象连接到服务器
SharedObject.getRemote()参数说明:
第1个参数:远程共享对象的名称。 该名称可以包含正斜杠 (/);例如,work/addresses 是合法名称。 共享对象名称中不允许使用空格,也不允许使用下面这些字符: ~ % & \ ; : " ' , > ? ? #
其实就是SharedObject 对象生成文件的名字,SharedObject 文件的后缀为*.fso ,因此这里生成就是talk.fso ,生成的位置就在test_myApp 下的某个文件夹中。
第2个参数:将存储共享对象的服务器的 URI。 此 URI 必须与传递给 connect() 方法的 NetConnection 对象的 URI 相同。在本程序中就是rtmp://192.168.0.249/test_myApp
第3个参数:指定共享对象的数据属性的特性是本地永久储存还是远程永久储存。
true,指定只有服务器上的共享对象是永久性的。
false,指定客户端或服务器上的共享对象不是永久性的。false 的话SharedObject 对象是的存放在内存中的,如果test_myApp 这个server 被停止则内存中的SharedObject 对象就被清空。
另一个重要的代码是
talk_so.addEventListener(SyncEvent.SYNC,talkSoSyncHandler);
这是给远程的SharedObject 对象加入同步事件的监听,一旦远程的SharedObject 对象被任何一个client 修改,那么fms 就会把最新版本的SharedObject 对象广播给所有的client ,以达到所有client 数据同步的目的,这样就会触发client 端的SyncEvent.SYNC 事件。client 端只有加入对这一事件的监听才能知道公共的SharedObject 对象被修改了,才能做出反应获得最新版本的信息。
(12)实现talkSoSyncHandler
private function talkSoSyncHandler(evt:SyncEvent):void
{
txt_content.text="";
if ( talk_so.data.msgList!=null )
{
var tmp:ArrayCollection = new ArrayCollection();
convertArrayCollection(tmp,talk_so.data.msgList as ArrayCollection);
for(var i:int=0;i<tmp.length ;i++)
{
var message:Object = tmp.getItemAt(i);
var fullMsg:String=message.nickname+"在"+message.time.toTimeString()+"说:"+message.msg;
txt_content.text=txt_content.text+fullMsg+"\n";
}
}
}
代码说明:
这个回调函数要做的就是把talk. 这个SharedObject 中的msgList 对象取出,然后遍历出里面所有的Message 对象,刷新显示控件显示所有记录。
(13)实现按钮单击代码,发送聊天记录
private function btnSenClickHandler(evt:MouseEvent):void
{
var arr:ArrayCollection = new ArrayCollection();
if ( talk_so.data.msgList==null )
{
arr = new ArrayCollection();
}
else
{
convertArrayCollection(arr,talk_so.data.msgList as ArrayCollection);
}
var obj:Message = new Message();
obj.nickname=txt_nickname.text;
obj.msg=txt_message.text;
obj.time = new Date();
arr.addItem(obj);
talk_so.setProperty("msgList",arr);
txt_message.text="";
}
代码说明:
如果SharedObject-talk 中的msgList 不存在(说明你是聊天室的第一位使用者)就新建一个集合对象,然后将Message 对象add 到这个集合中去。
如果msgList 已经存在了,则获取这个集合对象,把新的聊天记录往后面插入。
最后使用SharedObject.setProperty("name",value) 这个函数将你更新好的聊天记录列表写入到公共的SharedObject 对象中去即可。
调用setProperty() 以更改数据对象的属性。 服务器将更新这些属性,并调度 sync 事件,并将这些属性发回到连接的客户端。 这就是为什么每个客户端都能看到一样的聊天记录。
(14)运行程序
(15)fms服务器情况
我们可以看到客户端的链接情况和SharedObject情况
(16)代码下载
http://files.cnblogs.com/aierong/fmsDemo.rar
您收到代码后,请回到文章下面留言告之一下!要是没收到,我可以再发!
提供代码是为了互相学习,一起探讨!请大家多交流!
1.要是对代码有什么疑问,可以在文章的评论区留言,我会尽我所能答复您!
2.要是您在运行代码的过程中发现bug,或者是您有什么好的建议和意见,也可以在文章的评论区留言给我,我会及时更正!
评论区使用提示:
评论区留言(使用高级评论)是可以贴图片的,要是有难以描述的问题,可以贴图片和文字一起说明
谢谢!
收藏到QQ书签 添加到百度搜藏
添加到雅虎收藏
B. MCAD学习
C. 代码阅读总结
D. ASP.NET状态管理
E. DB(数据库)
F. WAP
G. WinForm
H. Flex
Sql Server2005 Transact-SQL 新兵器学习总结之-总结
MS SQL数据库备份和恢复存储过程(加强版本)
sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)
ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现)
WAP开发资料站(最新更新)
自定义格式字符串随笔 (IFormattable,IFormatProvider,ICustomFormatter三接口的实现)
Mcad学习笔记之异步编程(AsyncCallback 委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)
Mcad学习笔记之通过反射调用類的方法,屬性,字段,索引器(2種方法)
Mcad学习笔记之序列化(2进制和Soap序列 化)
Mcad学习笔记之委托再理解(delegate的构造器,BeginInvoke,EndInvoke,Invoke4个方法的探讨)
ASP.NET状态管理之一(概括篇)
Flex,Fms学习笔记
希望上面提到的知识对您有所提示,同时欢迎交流和指正
作者: aierong
出处: http://www.cnblogs.com/aierong
贴子以"现状"提供且没有任何担保,同时也没有授予任何权利!
本文版权归作者所有,欢迎转载!
原创技术文章和心得,转载注明出处!这也是对原创者的尊重!
引用aierong:
引用扬仔:
#244楼[楼主]2009-12-26 08:07 | aierong
引用扬仔:
luren jis: 我遇到这样一个问题,就是上面的代码我整个调试通了~但是就是在我的服务器端不能创建fso文件~因此,只要客户端一旦提交对话,其他客户端的内容就清空,只有自己客户端看的见说的内容,请问这个问题要怎么解决呢
把setProperty中的ArrayCollection改成Array,String等都可以,就是用ArrayCollection出现以上情况,具体原因不清楚
对了 你的FlashPlayer播放器 什么版本
代码除了IP地址其他的都没改动,FlashPlayer用的是FlashPlayer10
我用的是fb3
楼主,我的也出现和杨仔一样的问题;环境是:fms3.5+flex3
我用的是fms3
luren jis: 我遇到这样一个问题,就是上面的代码我整个调试通了~但是就是在我的服务器端不能创建fso文件~因此,只要客户端一旦提交对话,其他客户端的内容就清空,只有自己客户端看的见说的内容,请问这个问题要怎么解决呢
我用的环境是fms3.5+flex4出现同样的问题,调试发现talk_so.setProperty("msgList",arr);的第二个参数传String或者例子代码中单个Message对象都没问题,但只要传入ArrayCollection类型就会出现以上问题,并且日志中提示Thu 04:45:34 PM: Assert failed in ..\FlashPlayer6_02_FlashCom\shared_tcserver\tcparser.cpp line 109
很郁闷,到现在还没解决,刚开始学fms就碰到这么头疼的问题。这么多人都出现一样的问题估计是环境支持的事,跟代码好像没太大关系。
我也出现了这个情况,我用的是fms3.5+flex3。我发现fms控制台里点击talk对象,右上角会出现一个冒号,内容是:failed to make a debug connection,please check that the application in debug model。 问题会不会出在这里?
引用扬仔:
luren jis: 我遇到这样一个问题,就是上面的代码我整个调试通了~但是就是在我的服务器端不能创建fso文件~因此,只要客户端一旦提交对话,其他客户端的内容就清空,只有自己客户端看的见说的内容,请问这个问题要怎么解决呢
我用的环境是fms3.5+flex4出现同样的问题,调试发现talk_so.setProperty("msgList",arr);的第二个参数传String或者例子代码中单个Message对象都没问题,但只要传入ArrayCollection类型就会出现以上问题,并且日志中提示Thu 04:45:34 PM: Assert failed...
我当时开发用的是fms3.0学习版
和flex3
引用扬仔:
#42楼[楼主]2009-03-02 08:13 | aierong
--引用--------------------------------------------------
luren jis: 我遇到这样一个问题,就是上面的代码我整个调试通了~但是就是在我的服务器端不能创建fso文件~因此,只要客户端一旦提交对话,其他客户端的内容就清空,只有自己客户端看的见说的内容,请问这个问题要怎么解决呢
我也遇到一样一样的问题,第一次用fms就碰壁,郁闷很长时间一直没解决。我用的环境是fms3.5+flex4
奇怪 我...
我的也是这种问题,我用的是FMS3.5+FlashDevelop。把ArrayCollection类换成Array类就好了(方法和属性也要修改哦)
循环
公告
搜索
最新随笔
- 1. Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇)
- 2. 创建Windows服务(Windows Services)N种方式总结
- 3. .NET中对串口(COM)读写操作方式汇总
- 4. Sql Server2008 Transact-SQL 新兵器学习总结之-用户定义表类型和日期,时间数据类型
- 5. Flex(flash)检测摄像头的3种状态(是否被占用,没安装摄像头,正常)
- 6. Flex Air开发SQLite小结,SQLite开发工具及SQLite与Sql Server的语法差异汇总
- 7. 开源Flex Air版免费激情美女视频聊天室,免费网络远程视频会议系统((Flex,Fms3联合打造))<视频聊天,会议开发实例6>
- 8. 免费网络远程视频会议系统,免费美女多人视频聊天(附源码下载)(Flex和Fms3开发)<视频聊天,会议开发实例5>
- 9. Flex组件的项目渲染器(ItemRenderer)使用总结
- 10. 推荐几个Adobe Flex Builder 3的插件(代码格式化和fms服务器通讯文件(main.asc)编写)
我的标签
随笔分类(156)
随笔档案(122)
相册
AJAX JQuery
BLOG个人站点
WEB开发
其他站(技术)
积分与排名
- 积分 - 646888
- 排名 - 90
最新评论
- 1. Re:Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象)
- 楼主你好 我在做实时聊天的时候接受的rtmp视频播放的flashplayer只要是debug版本无论是是桌面还是网页就会直接崩溃 你有没有遇到类似的问题啊?这是我的一个rtmp链接
rtmp://rtmp.aiwaya.cn/yunva/781 - 2. Re:Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇)
- 跨域的问题是怎么处理的
- 3. Re:Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
- 很好!
- 4. Re:Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇)
- 总结的老好了,致敬
- 5. Re:ASP.NET状态管理之三(隐藏域HiddenField)
- 学习了,Thanks.
- 6. Re:免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码))
- 楼主,为什么我下载你的代码后视频正常但是文字聊天不能。A用户发送消息后只有A的屏幕有显示,其他用户都没有,但是如果B用户发送,那么A用户发送过的消息A屏幕一刷新就变空白。
- 7. Re:免费网络远程视频会议系统,免费美女多人视频聊天(附源码下载)(Flex和Fms3开发)
- 斑竹,最近我在研究这个,一直想做一对一的视频,最好能发起视频邀请,对方能选择接听和挂断的,望指教!!
- 8. Re:Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象)
- fms都启动了, 点recodr报51行null
- 9. Re:Fms3和Flex打造在线视频录制和回放
- 楼主,我在点击回放视频完成后画面就是视频最后一帧.如何才能让它放完视频后自动回到实时的自己的视频画面啊?
- 10. Re:自定义格式字符串随笔(IFormattable,IFormatProvider,ICustomFormatter三接口的实现)
- 我就是想问下 实现的ICustomFormatter接口的Format是在什么情况下会执行?
阅读排行榜
- 1. Flex,Fms3相关文章索引(2009-3-25更新)(34867)
- 2. 开源Flex Air版免费激情美女视频聊天室,免费网络远程视频会议系统((Flex,Fms3联合打造))<视频聊天,会议开发实例6>(29149)
- 3. MSN在线状态代码(24237)
- 4. 免费网络远程视频会议系统,免费美女多人视频聊天(附源码下载)(Flex和Fms3开发)<视频聊天,会议开发实例5>(23940)
- 5. Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象)<视频聊天,会议开发实例1>(21367)
- 6. sqlserver字符串拆分(split)方法汇总(20316)
- 7. Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)<视频聊天,会议开发实例3>(17584)
- 8. WAP开发资料站(最新更新)(15928)
- 9. Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1(15574)
- 10. Flex组件的项目渲染器(ItemRenderer)使用总结(15396)
评论排行榜
- 1. 免费网络远程视频会议系统,免费美女多人视频聊天(附源码下载)(Flex和Fms3开发)<视频聊天,会议开发实例5>(765)
- 2. 开源Flex Air版免费激情美女视频聊天室,免费网络远程视频会议系统((Flex,Fms3联合打造))<视频聊天,会议开发实例6>(693)
- 3. Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)<视频聊天,会议开发实例3>(350)
- 4. 免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码))<视频聊天,会议开发实例4>(344)
- 5. Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象)<视频聊天,会议开发实例1>(289)
- 6. Fms3和Flex打造在线视频录制和回放<视频聊天,会议开发实例2>(107)
- 7. 推荐几个Adobe Flex Builder 3的插件(代码格式化和fms服务器通讯文件(main.asc)编写)(87)
- 8. Flex,Fms3相关文章索引(2009-3-25更新)(71)
- 9. WAP开发资料站(最新更新)(46)
- 10. ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现) (43)
推荐排行榜
- 1. 创建Windows服务(Windows Services)N种方式总结(10)
- 2. Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇)(7)
- 3. .NET中对串口(COM)读写操作方式汇总(6)
- 4. Flex(flash)检测摄像头的3种状态(是否被占用,没安装摄像头,正常)(3)
- 5. 免费网络远程视频会议系统,免费美女多人视频聊天(附源码下载)(Flex和Fms3开发)<视频聊天,会议开发实例5>(3)
- 6. sqlserver字符串拆分(split)方法汇总(3)
- 7. asp.net的3个经典范例(ASP.NET Starter Kit ,Duwamish,NET Pet Shop)学习资料(2)
- 8. Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象)<视频聊天,会议开发实例1>(2)
- 9. flex,fms名称解释和学习资源(2)
- 10. Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)<视频聊天,会议开发实例3>(2)
fms3.5和fms3开始学习版的版本差异导致的?
难道是fms版本的问题?
学习版。只允许10个链接