gembin

          OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

          HBase, Hadoop, ZooKeeper, Cassandra

          Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

          There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

          About Me

           

          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 Server3FMS的使用非常簡便,你只要在安裝目錄下找到Applications目錄,并在其下新建一個子目錄就可以成為你的工程或項目了。關于FMS的使用大家可以參考相關文章,本文不做介紹:利用FMSRSO我們可以實現非常多的功能,諸如,聊天室,聯機游戲,視頻會議,在線視頻錄制和視頻聊天。。。。。。

          在這里我用一個簡單的聊天室實例為例稍做講解:

          Code
           1  <?xml version="1.0" encoding="utf-8"?>  
           2  <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)  編輯  收藏 所屬分類: FlashFlexActionScript3

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類(440)

          隨筆檔案(378)

          文章檔案(6)

          新聞檔案(1)

          相冊

          收藏夾(9)

          Adobe

          Android

          AS3

          Blog-Links

          Build

          Design Pattern

          Eclipse

          Favorite Links

          Flickr

          Game Dev

          HBase

          Identity Management

          IT resources

          JEE

          Language

          OpenID

          OSGi

          SOA

          Version Control

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          free counters
          主站蜘蛛池模板: 余姚市| 元朗区| 隆尧县| 上饶县| 高碑店市| 哈巴河县| 枣庄市| 曲阳县| 奉贤区| 唐河县| 个旧市| 大宁县| 寿宁县| 肥西县| 荣成市| 上栗县| 湖口县| 北票市| 桓仁| 富蕴县| 大竹县| 贵州省| 南平市| 潍坊市| 宁夏| 密山市| 乐亭县| 嘉义县| 共和县| 邹平县| 黄龙县| 雷山县| 桓台县| 盐源县| 通榆县| 虞城县| 丘北县| 墨竹工卡县| 东至县| 新余市| 宜城市|