搜尋部落格文章

2014年1月28日 星期二

[轉] Shared Object共享資料

shared Object對象相當強大,他提供了在多個客戶端實時數據共享,並且可以存儲在客戶端或遠程服務器。 可以把本地共享對像比作cookies,把遠程共享對像看作實時的數據傳輸設備。
通常共享對象的使用方法如下:
1. 保持本地永久存儲這是最簡單的共享對象應用。 並且不需要FlashCom Server的支持。 例如,你可以使用SharedObject.getLocal方法來創建一個本地共享對象。 因為本地共享對像是永久存儲的,用戶端Flash結束的時候會通過data屬性保存在客戶端本地機器中。 當下一次運行swf文件的時候,就可以直接存取到。 如果你在影片播放結束的時候把共享對象的屬性置空了,下一次就存取不到任何的值了。
2. 在服務器端共享和存儲數據存儲在服務器端的共享對像數據可以被其它聯機的客戶端取到。 例如,你打開了一個遠程共享對象,該共享對像中存儲了一個電話清單。 當客戶端對該共享對像數據有任何更改的時候,改變的數據對所有聯機對像都是自同步的。 如果對象暫時無法連接到服務器端,那麼所作的更改將會在下一次更新到服務器端。
3. 實時交流數據共享對象可以實時的在多個客戶端之間共享數據。 你可以打開一個存儲實時數據的遠程共享對象,例如,一個連接到聊天室的用戶列表,當有用戶進入或離開聊天室的時候,該共享對象會實時更新,所有連接到該服務器的客戶端將立刻看到用戶列表的更改。
下面的例子演示了一個簡單的共享對象的使用,記住在創建一個遠程共享對象之前,必須先使用NetConnect對象聯機到服務器。
  1. 01 : // Create a local shared object
  2. 02 : so = SharedObject .getLocal('foo');
  3. 03 : // Create a remote shared object that is not persistent on the server
  4. 04 : nc = new NetConnection();
  5. 05 : nc.connect('rtmp://server.cuplayer.com/chat/room3';
  6. 06 : so = SharedObject .getRemote('users', nc.uri);
  7. 07 : so.connect(nc);
  8. 08 : // Create a remote shared object that is persistent on the server
  9. 09 : // but not on the client
  10. 10 : nc = new NetConnection();
  11. 11 : nc.connect('rtmp://server.cuplayer.com/chat/room3';
  12. 12 : so = SharedObject .getRemote('users', nc.uri, true);
  13. 13 : so.connect(nc);
  14. 14 : // Create a remote shared object that is persistent on the server
  15. 15 : // and on the client
  16. 16 : nc = new NetConnection();
  17. 17 : nc.connect('rtmp://server.cuplayer.com/chat/room3';
  18. 18 : so = SharedObject .getRemote('users', nc.uri, '/chat');
  19. 19 : so.connect(nc);

規劃遠程共享對像要規劃遠程共享對象,我們應該先設計一個數據管理模型。 我們需要做的是數據字段設計和管理、衝突解決、客戶端和服務器端的存儲分析,我們針對這些方面一一說明。
如果要使用本地存儲的遠程共享對象,請確保swf的舞台尺寸大於215×138像素,否則將無法正常顯示設置面板。
數據設計和管理共享對象關聯的數據存儲在共享對象的data屬性中,要設置共享對象的值可以使用下面的方式:

1 : //建立本地共享對象,沒有則自動創建
2 : var so = SharedObject.getLocal('local_so');
3 : //為共享對像中的變量賦值
4 : so.data.userID = 'Liu21st';
5 : so.data.currentStatus = 'onLine';
6 : so.data.lastLogon = '2004-06-30';

如果要創建客戶端的私有存儲,可以不通過data屬性,如:

1 : so.userID = 'Liu21st';
2 : so.currentStatus = 'onLine';
3 : so.lastLogon = '2004-06-30';

對共享對象的data屬性賦NULL或undefined可以初始化字段
so.data.userID = NULL ;
但是並沒有刪除該字段,如果要刪除請用:
delete so.data.userID;
我們也可以使用類似於
so.data.year.month.dayOfMonth = someValue;的方式來賦值
//注意該賦值並非一個字段year.month.dayOfMonth
//而分別是給三個字段year,month,dayOfMonth 初始化相同的值

但是不推薦使用該方式,因為這樣在同步的時候會始終佔用較多的帶寬使用分開賦值的方式可以避免每次同步全部數據
so.data.year = someValue;
so.data.month = someValue;
so.data.dayOfMonth = someValue;
你可以根據應用程序的需求來設計共享對象的變量。 如果共享對像中的值都需要頻繁更新,盡可能減少共享對象的字段可以提高性能。
站長經常使用的方式是:

1 : so.data.user = { id:1,sex:b,name:liu21st }
2 : // 在存取的時候可以使用
3 : // so.data.user.name的方式

沒有留言:

張貼留言