Flex SharedObject 對象詳解
ShareObject,顧名思義共用對象,而通常意義上的共用,從B/S結構上來講,無非是用戶端(瀏覽器端)的共用和伺服器端的共用了,不錯,ShareObject剛好份演了這兩種角色。而且ShareObject也是按此進行了兩種分類,一類是LSO——Local Share Object(本地共用對象)其實類似於cookie,而另一種RSO——Remote Share Object(遠程共用對象) 我感覺比較類似於JSP中的Application對象,但好象比Application更強大。
下面我分別用執行個體代碼來說兩者的用法和用途:
一:LSO(本地共用對象)
LSO的用法比較簡單,和我們平常操作Cookie大同小異:
1.得到一個共用對象:
var so:SharedObject=SharedObject.getLocal("mydata","/");
2.往共用對象裡存入值:
var user:Object=new Object();
user.userName=userName.text;
user.passWord=passWord.text;
user.isSaveLogin=(remember.selected==true?1:0);
so.data.user=user;
3.清除共用對象裡的值:
4.讀取共
var so:SharedObject=SharedObject.getLocal("mydata","/");
if(so.data.user!=null){
so.data.user=null;
}
享對象裡的值:
var so:SharedObject=SharedObject.getLocal("mydata","/");
if(so.data.user!=null){
userName.text=so.data.user.userName;
passWord.text=so.data.user.passWord;
if(so.data.user.isSaveLogin.toString()=="1"){
remember.selected=true;
}
二:RSO(遠程共用對象):
RSO是伺服器端的共用對象,伺服器端的資料共用可以實現多個用戶端資料共用,在這裡伺服器我採用Flash Media Server3,FMS的使用非常簡便,你只要在安裝目錄下找到Applications目錄,並在其下建立一個子目錄就可以成為你的工程或項目了。關於FMS的使用大家可以參考相關文章,本文不做介紹:利用FMS和RSO我們可以實現非常多的功能,諸如,聊天室,聯機遊戲,視頻會議,線上視頻錄製和視訊交談。。。。。。
在這裡我用一個簡單的聊天室執行個體為例稍做講解:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="TextSO ();">
<mx:Script>
<![CDATA[
import flash.events.SyncEvent;
import flash.events.NetStatusEvent;
import flash.events.MouseEvent;
import flash.net.SharedObject;
import flash.net.NetConnection;
private var text_so:SharedObject;
private var nc:NetConnection;
private var rtmpGo:String;
private var good:Boolean;
public function TextSO ():void
{
button.label="Send";
button.addEventListener (MouseEvent.CLICK,sendMsg);//為發送按鈕添加發送事件
rtmpGo = "rtmp://localhost/basicSO";//這裡設定FMS伺服器的串連地址,basicSO即為,
//FMS安裝目錄下Applications下自己手動建立的一個檔案夾名稱,也是FMS的工程名,就是這麼簡潔,不可意議
nc = new NetConnection( );//產生一個連線物件
nc.connect (rtmpGo);//串連到上面的地址
nc.addEventListener (NetStatusEvent.NET_STATUS,doSO);//加入串連的監聽事件,以便根據串連返回的狀態做相應處理
}
private function doSO (e:NetStatusEvent):void
{
good=e.info.code == "NetConnection.Connect.Success";//判斷是否為串連成功狀態
//串連返回的狀態有好幾種,大家可以參看FMS的文檔,很詳盡
if (good)//如果串連成軾,執行如下操作
{
text_so=SharedObject.getRemote("test",nc.uri,false);//得到遠程共用對象,false屬性是設定共用的資料為非持久化的,
//即重啟伺服器後,先前的資料不會儲存
text_so.connect (nc);
text_so.addEventListener (SyncEvent.SYNC,checkSO);
//為共用對象添加非同步事件,這也是伺服器同步處理多用戶端最關鍵的地方,
//一個用戶端進行了什麼操作,其它用戶端也會有相應的變化,就是通過此事件來完成的
}
}
private function checkSO (e:SyncEvent):void
{
for (var chng:uint; chng<e.changeList.length; chng++)
{
switch (e.changeList[chng].code)
{
case "clear" :
break;
case "success" :
trace (text_so.data.msg);
break;
case "change" ://一個用戶端改變資料會更新所有用戶端
textArea.htmlText+=text_so.data.msg + "\n";
break;
}
}
}
private function sendMsg (e:MouseEvent):void
{
text_so.setProperty ("msg",textInput.text);//將新的資訊存入共用對象
textArea.htmlText+=text_so.data.msg + "\n";//更新用戶端的資訊列表
}
]]>
</mx:Script>
<mx:VBox>
<mx:TextArea id="textArea" width="200" height="200"/>//資訊列表框
<mx:TextInput id="textInput"/>//訊息輸入框
<mx:Button id="button" />//發送按鈕
</mx:VBox>
</mx:Application>