Flex ActionScript 3.0 SharedObject 用於在用戶計算機或服務器上讀取和存儲有限的數據

flash.net
public class SharedObject
繼承 SharedObject Inheritance EventDispatcher Inheritance Object

語言版本:  ActionScript 3.0
運行時版本:  AIR 1.0 Flash Player 9

SharedObject 類用於在用戶計算機或服務器上讀取和存儲有限的數據量。使用共享對象,可在永久貯存在本地計算機或遠程服務器上的多個客戶端 SWF 文件和對象之間實現實時數據共享。本地共享對象類似於瀏覽器 Cookie,遠程共享對象類似於實時數據傳輸設備。若要使用遠程共享對象,您需要 Adobe Flash Media Server。

可使用共享對象執行以下操作:

  • 保持本地永久性。這是使用共享對象的最簡單方法,並且無需使用 Flash Media Server。 例如,可以調用 SharedObject.getLocal() 以在應用程序中創建共享對象,如帶記憶功能的計算器。用戶關閉計算器時,Flash Player 將在用戶計算機的共享對象中保存最後一個值。 計算器下一次運行時,將包含先前所擁有的值。或者,在計算器應用程序關閉之前,如果將共享對象的屬性設置爲 null,下次運行該應用程序時,它在打開時不包含任何值。維護本地永久性的另一示例就是跟蹤用戶首選項或複雜網站的其它數據,如用戶在新聞網站上所閱讀文章的記錄。跟蹤此信息將允許您以不同方式分別顯示已經閱讀的文章和新的未讀文章。在用戶計算機上存儲此信息可減小服務器負載。
  • 在 Flash Media Server 上存儲並共享數據。共享對象可以在服務器上存儲數據以供其它客戶端進行檢索。例如,調用SharedObject.getRemote() 以創建一個在服務器上永久保留的遠程共享對象,如電話簿。每次客戶端對共享對象進行更改時,修改後的數據可供當前或以後連接到該對象的所有客戶端使用。如果還在本地永久保留了該對象,並且客戶端在未連接到服務器時更改了數據,下次客戶端連接到遠程共享對象時,則會將數據複製到該對象。
  • 實時共享數據。共享對象可以實現多個客戶端的實時數據共享。例如,您可以打開一個存儲連接到聊天室的用戶列表的遠程共享對象,連接到該對象的所有客戶端都能看到此列表。當用戶進入或離開聊天室時,將更新該對象,連接到該對象的所有客戶端都能看到修改的聊天室用戶列表。

若要創建本地共享對象,請調用 SharedObject.getLocal()。若要創建遠程共享對象,請調用 SharedObject.getRemote()

當應用程序關閉時,將會刷新共享對象或將其寫入磁盤。也可以調用 flush() 方法以顯式地將數據寫入磁盤。

本地磁盤空間注意事項。本地共享對象具有一些限制,這些限制很重要,您在設計應用程序時要予以考慮。有時可能不允許 SWF 文件寫入本地共享對象,有時可能會在您不知情的情況下刪除在本地共享對象中存儲的數據。Flash Player 用戶可以管理對單個域或所有域可用的磁盤空間。當用戶減少可用磁盤空間時,一些本地共享對象可能會被刪除。Flash Player 用戶還具有隱私控制能力,它們可防止第三方域(當前瀏覽器地址欄中域之外的域)讀取或寫入本地共享對象。

注意:在本地計算機(而不是遠程服務器)上存儲和運行的 SWF 文件始終可以將第三方共享對象寫入磁盤。有關第三方共享對象的詳細信息,請參閱“Flash Player 幫助”中的“全局存儲設置”面板

最好檢查與磁盤空間數量和用戶隱私控制有關的故障。在調用 getLocal() 和 flush() 時執行這些檢查:

  • SharedObject.getLocal() -- 調用此方法失敗時(如用戶禁用了第三方共享對象,並且您的 SWF 文件的域與瀏覽器地址欄中的域不匹配),Flash Player 將引發異常。
  • SharedObject.flush() -- 調用此方法失敗時,Flash Player 將引發異常。調用成功時,將返回 SharedObjectFlushStatus.FLUSHED。需要額外存儲空間時,將返回 SharedObjectFlushStatus.PENDING。Flash Player 提示用戶增加本地保存信息的存儲空間。隨後,對 netStatus事件進行調度,同時信息對象將指示刷新是否成功。

如果您的 SWF 文件嘗試創建或修改本地共享對象,請確保 SWF 文件的寬度至少爲 215 像素,高度至少爲 138 像素,這是用於顯示提示用戶增加其本地共享對象存儲限制的對話框的最小尺寸。如果您的 SWF 文件小於這些尺寸,且需要增加存儲限制,則 SharedObject.flush() 失敗,返回SharedObjectFlushedStatus.PENDING,並調度 netStatus 事件。

遠程共享對象。如果使用 Flash Media Server,您可以創建並使用遠程共享對象,這些對象是由連接到應用程序的所有客戶端實時共享的。在一個客戶端更改遠程共享對象的屬性時,也會爲所有連接的客戶端更改此屬性。您可以使用遠程共享對象同步客戶端,例如,在玩多人遊戲的用戶。

每個遠程共享對象具有一個 data 屬性,此對象包含存儲數據的屬性。可以調用 setProperty() 以更改數據對象的屬性。服務器將更新這些屬性,調度 sync 事件,並將這些屬性發回到連接的客戶端。

您可以選擇將遠程共享對象永久保留在客戶端和/或服務器上。默認情況下,Flash Player 最多在本地永久保存 100K 的遠程共享對象。在嘗試保存較大的對象時,Flash Player 將顯示一個“本地存儲”對話框,用戶可以在其中允許或拒絕共享對象的本地存儲。請確保舞臺大小至少爲 215 x 138 像素;這是 Flash 顯示該對話框所需的最小大小。

如果用戶選擇“允許”,服務器將保存共享對象並調度 code 屬性值爲 netStatus 的 SharedObject.Flush.Success 事件。如果用戶選擇“拒絕”,服務器不會保存共享對象並調度 code 屬性值爲 SharedObject.Flush.Failed 的 netStatus 事件。



發佈了38 篇原創文章 · 獲贊 4 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章