Flex Shared Object
Flash cookie
是不是第一次聽說?cookie大家都不陌生,是一個存儲在瀏覽器目錄的文本文件,最大信息量為4K。Flash cookie類似于瀏覽器cookie的功能,也是存儲在客戶端的文件,其信息量能有多大呢?我曾經在飯否上記錄了這段文字:“Flash使得RIA能在客戶端存儲10MB的數據,Cookies只能存儲4KB。”這段文字也許能說明些什么。下面代碼的核心是共享對象SharedObject的使用,Flash cookie正是基于此對象:
var so:SharedObject = SharedObject.getLocal("cos");
if (so.size == 0)
{
// 共享對象不存在時。
trace("created...");
so.data.now = new Date().time;
//向Flash cookie中寫數值……
so.data.words = "hello cos";
//向Flash cookie中寫數值……
}
一:LSO(本地共享對象):
本地共享對象有時被稱作“Flash Cookie”,它是一個數據文件,可以由所訪問的站點在您的計算機上創建。在Flash中提供了下面的操作本地對象的方法:
SharedObject.clear() 刪除本地共享對象;
SharedObject.flush() 立即把共享對象數據寫入本地文件;
SharedObject.getLocal() 創建或連接本地共享對象;
SharedObject.getSize() 取得本地共享對象的指定大小數據。
主要看下面的這個方法:
SharedObject.getLocal(objectName [, localPath])
其中objectName是該共享對象的名字,localPath即共享對象所在路徑。
// 創建一個本地保存數據的對象
var cookie:Object = SharedObject.getLocal("cookie");
方 法會在默認的路徑下生成一個cookie.sol文件。文件的默認大小不能超過100k,當然可以通過鼠標右擊flash窗口,選擇設置來管理或者禁用您 的本地共享對象??梢宰屆總€flash獨立使用自己的SharedObject,當然也可以做一個全域的SharedObject讓所有的swf使用,只 要給localPath 賦值 "/"。
在win2k和 win xp中,默認路徑為C:\Documents and Settings\username\Application Data\Macromedia\Flash Player\#SharedObjects (username為機器的用戶名)
每個對象都會有一個只讀屬性data,用來存儲被存儲 到“數據特性”中的對象的屬性,這些屬性可以共享/存儲,每一個屬性可以是各種基礎數據類型(數組,數字布爾值等)對象。現在cookie已經存儲在 SharedObject中了,以后你可以通過對SharedObject數據屬性的存取來實現對cookie的存取。例如:
cookie.data.name = "張三";
cookie.data.password = "123456";
cookie.data.rememberPassword = true;
共享對象的寫入會在應用程序退出時自動執行,也可以通過cookie.flush()強制寫入
// Person Class
class Person{
private var _name:String;
public setName(value:String):void{
_name=value;
}
public getName():String{
return _name;
}
}
// Deserilizes custom class in ShareObject
Object.registerClass("Person",Person);
// Initializes SharedObject
var SavedData_so = SharedObject.getLocal("SavedPersonData");
// Parameters in constructor are NOT saved
SavedData_so.data.Person = new Person();
SavedData_so.data.Person.setName("gembin");
SavedData_so.flush();
二:RSO(遠程共享對象):
RSO是服務器端的共享對象,服務器端的數據共享可以實現多個客戶端數據共享,在這里服務器我采用Flash Media Server3,FMS的使用非常簡便,你只要在安裝目錄下找到Applications目錄,并在其下新建一個子目錄就可以成為你的工程或項目了。關于FMS的使用大家可以參考相關文章,本文不做介紹:利用FMS和RSO我們可以實現非常多的功能,諸如,聊天室,聯機游戲,視頻會議,在線視頻錄制和視頻聊天。。。。。。
在這里我用一個簡單的聊天室實例為例稍做講解:
Code2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="TextSO ();">
3 <mx:Script>
4 <![CDATA[
5 import flash.events.SyncEvent;
6 import flash.events.NetStatusEvent;
7 import flash.events.MouseEvent;
8 import flash.net.SharedObject;
9 import flash.net.NetConnection;
10
11 private var text_so:SharedObject;
12 private var nc:NetConnection;
13 private var rtmpGo:String;
14 private var good:Boolean;
15
16 public function TextSO ():void
17 {
18 button.label="Send";
19 button.addEventListener (MouseEvent.CLICK,sendMsg);//為發送按鈕添加發送事件
20 rtmpGo = "rtmp://localhost/basicSO";//這里設置FMS服務器的連接地址,basicSO即為,
21 //FMS安裝目錄下Applications下自己手動新建的一個文件夾名稱,也是FMS的工程名,就是這么簡潔,不可意議
22 nc = new NetConnection( );//產生一個連接對象
23 nc.connect (rtmpGo);//連接到上面的地址
24 nc.addEventListener (NetStatusEvent.NET_STATUS,doSO);//加入連接的監聽事件,以便根據連接返回的狀態做相應處理
25 }
26
27 private function doSO (e:NetStatusEvent):void
28 {
29 good=e.info.code == "NetConnection.Connect.Success";//判斷是否為連接成功狀態
30 //連接返回的狀態有好幾種,大家可以參看FMS的文檔,很詳盡
31 if (good)//如果連接成軾,執行如下操作
32 {
33 text_so=SharedObject.getRemote("test",nc.uri,false);//得到遠程共享對象,false屬性是設置共享的數據為非持久化的,
34 //即重啟服務器后,先前的數據不會保存
35 text_so.connect (nc);
36 text_so.addEventListener (SyncEvent.SYNC,checkSO);
37 //為共享對象添加異步事件,這也是服務器同步處理多客戶端最關鍵的地方,
38 //一個客戶端進行了什么操作,其它客戶端也會有相應的變化,就是通過此事件來完成的
39 }
40 }
41
42 private function checkSO (e:SyncEvent):void
43 {
44 for (var chng:uint; chng<e.changeList.length; chng++)
45 {
46 switch (e.changeList[chng].code)
47 {
48 case "clear" :
49 break;
50
51 case "success" :
52 trace (text_so.data.msg);
53 break;
54
55 case "change" ://一個客戶端改變數據會更新所有客戶端
56 textArea.htmlText+=text_so.data.msg + "\n";
57 break;
58 }
59 }
60 }
61
62 private function sendMsg (e:MouseEvent):void
63 {
64 text_so.setProperty ("msg",textInput.text);//將新的信息存入共享對象
65 textArea.htmlText+=text_so.data.msg + "\n";//更新客戶端的信息列表
66 }
67
68
69 ]]>
70 </mx:Script>
71 <mx:VBox>
72 <mx:TextArea id="textArea" width="200" height="200"/>//信息列表框
73 <mx:TextInput id="textInput"/>//消息輸入框
74 <mx:Button id="button" />//發送按鈕
75 </mx:VBox>
76 </mx:Application>
posted on 2008-09-23 14:15 gembin 閱讀(1164) 評論(0) 編輯 收藏 所屬分類: Flash 、Flex 、ActionScript3