*******************************************************************************
【原创文章,版本归AVSuper所有,转载请注明,谢谢】
*******************************************************************************
FMS提供了“远程共享对象”的功能,可以让多个Client端的flash应用共享同一个全局对象,并且当客户端中的任何一个改变该对象时,系统会自动将该对象回发到FMS服务器,同时FMS服务器也会将该对象重新广播到所有客户端。
可能有些人还是不理解这个含义,举个例子来说,视频会议软件里面通常有个共享电子白板(WhiteBoard)的功能,就是A在画板上所画的线,B在他的电脑上面也可以看到。传统的实现方法,是A画图的操作通过网络传送给B,双方各自调用画图的代码。程序实现还是相对比较复杂。
描述得更简单一些,就是说,如果在三个电脑上不同的人浏览同一个页面,那么任何一个人在这个flash上面所做的操作,将在另外两个人的电脑上同步展现。这个的用途很广泛了,像视频会议(主席调用PPT、画面,参会者都能同步看到)、电子教室(老师做演示,学生机同步刷新)、互动游戏(多个不同的角色可以操作同一个对象),等等。
通过FLEX+FMS,利用FMS的远程共享对象,这个功能实现起来相当简单。
首先,在FMS的Application文件夹下,创建一个SharedObjectApp的文件夹,把live文件夹下面的那些默认文件复制过来,注意!这里必须要修改一个文件才行,默认的配置是未启用远程共享的!!很多人都是折腾半天发现不能共享,不是代码的问题,是这里设置的问题。至于如何设置,这里就不说了,卖个关子,呵呵。。。。。
然后,在FLEX代码中,创建连接:
private function InitApp():void
{
nc=new NetConnection;
nc.connect("rtmp://192.168.0.100/SharedObjectApp");
nc.addEventListener(NetStatusEvent.NET_STATUS,operateShareObject);
}
private function operateShareObject(evt:NetStatusEvent):void
{
isConnectSuccess=(evt.info.code=="NetConnection.Connect.Success");
if(isConnectSuccess)
{
shareObject=SharedObject.getRemote("ShareTest", nc.uri, false);
shareObject.connect(nc);
shareObject.addEventListener(SyncEvent.SYNC,detectSO);
}
}
private function detectSO(e:SyncEvent):void
{
for(var chng:uint;chng<e.changeList.length;chng++)
{
switch(e.changeList[chng].code)
{
case "change":
updateAllClientMsg();
break;
default:
break;
}
}
}
private function updateAllClientMsg():void
{
memo1.text+=shareObject.data.msg+"\n"; //这是文字信息的共享
}
完整的代码很多地方都能找到,就不贴了,有需要的找我吧。解释一下,每个客户端需要调用类似下面的代码来通知服务器更新数据:
shareObject.setProperty("msg", msgText.text);
shareObject.data.msg这里的msg就是所更新的属性,你可以根据自己的需要随便定义,setProperty的第二个参数是msg对应的数据。
在共享画图的时候,我们在鼠标按下时开始在本地画面、鼠标移动时继续画并记录坐标数据,鼠标抬起时本地画图完成,同时调用setProperty将线条粗细、颜色、透明度等信息以及所有坐标数据传递给服务器,在上面的updateAllClientMsg里面根据这些数据画图,就可以更新到所有客户端,实现共享画图了。
我对FLEX也是刚学,每天太忙也没时间去仔细研究,只以这几天了解的来看,FLEX+FMS的功能真的很强大,
以前抓耳挠腮要写很多代码实现的功能,现在都轻而易举实现,
而且,而且,而且。。。支持BS,跨平台,不用安装插件。。。
对于那些希望快速形成自己的流媒体应用软件的人来说,真应该好好研究研究一下啊!