理解共享物件
共享物件可以儲存任何flash支援的資料型別。就存放位置來說,共享物件可以分成存在客戶端計算機的本地型,以及存放在伺服器上的遠端型。你可以用它來記錄使用者的相關資訊(如使用者名稱、性別和其它設定引數等),或者用在伺服器端,儲存其它聯機使用者實時分享的資訊
共享物件意味著使用者可以在不同的使用者之間、不同的同一臺伺服器上的應用程式實體。flashcom server 支援三種不同的共享物件:local、remote和server-side。下面簡單介紹下這三個共享物件。
本地共享物件(local shared object)
建立和訪問本地共享物件的方法如下:
1.varso
=sharedobject
.getlocal
('mycookie'
)//建立本地共享物件
2.//儲存資料
3.//注意:不管是讀取還是寫入資料到本地共享物件,都必須通過data屬性。
4.so
.data
.username
='liu21st';5.
so.data
.msg
='世紀流年';6.
so.data
.counter=10
;7.//在預設狀態下,以上資料並不會馬上寫入使用者的磁碟,必須等到動畫被關閉,或者使用者離開你的**後,才會寫入磁碟。如果要立即寫入的話,必須使用flush方法。如下:
8.so
.flush
();
確認資料是否儲存成功可以通過onstatus事件來獲取
返回的code值為
sharedobject.flush.success(寫入成功)
sharedobject.flush.failed(寫入失敗)
**示例:
1.so.onstatus
=function
(info)5.
else
trace
('寫入失敗'
);
遠端共享物件(remote shared object)
通過flash影片的actionscript程式,在伺服器端建立能讓不同聯機使用者共同訪問的資料,稱為遠端共享物件。和本地共享物件一樣,遠端共享物件可以被本地計算機訪問,不同的是在資料儲存在伺服器端,所以任何使用者都可以連線到遠端共享物件訪問到相同的資訊。預設的儲存路徑是應用程式實體路徑下的 sharedobjects資料夾,副檔名是.fso。
遠端共享物件也是最常用的共享物件型別。每當聯機使用者(或伺服器端程式)更新遠端共享物件的內容,其它聯機到相同應用程式實體的使用者將自動收到更新內容的事件(onsync),保持彼此資料的同步。應用程式就是運用這個機制建立的。
例如,你可以開啟乙個遠端共享物件,如**號碼表(在伺服器端持久有效)。當使用者端對該共享物件作任何更改的時候,修改後的資料對其他連線到該遠端共享物件的使用者是自同步的。如果因為某種原因,更新了本地的資料資訊但是沒有連線到伺服器,那麼所作的更改會在下一次連線到伺服器的時候同步遠端共享物件。
建立遠端共享物件的方法:
1.varclient_nc
=new
netconnection
();2.
client_nc
.connect
('rtmp://localhost/videochat/room1'
);3.
so =
sharedobject
.getremote
('records'
,client_nc
.url
);//資料資料不寫入磁碟
4.so
.connect
(client_nc
);
遠端共享物件的資料讀取和寫入方法和本地共享物件類似,也是通過data屬性和flush方法。
使用下面語句可以把資料資料寫入伺服器端應用程式資料夾共享物件目錄
1.so =
sharedobject
.getremote
('records'
,client_nc
.url
,true
);2.
//該語句遠端共享的檔名將是records.fso
當遠端共享物件的內容改變或者初次聯機時,它都會向客戶端發出onsync (同步)事件,好讓所有聯機使用者都能實時取得最新的共享物件資料。
示例**:
1.so.onsync
=function
(list)5.
// do whatever else you want to do here 6.}
**共享物件(proxied shared object)
**共享物件是可以在使用者端和伺服器端共享的一種遠端共享物件,區別在於它是由伺服器端的actionscript程式建立的,例如,在伺服器端有兩個室的實體chat01和chat02,在chat02中可以連線到在chat01中定義的共享物件,更多的資訊可以參考手冊的 sharedobject.get方法。
和客戶端的sharedobject不同,設定共享變數的值要通過 sharedobject.setproperty,取得共享變數的值通過 sharedobject.getproperty 。
例項**:
1..=function();
1.myinfo
=sharedobject
.get
('foo'
);2.
varaddr
=myinfo
.getproperty
('address'
);3.
myinfo
.setproperty
('city'
,'san francisco'
);4.
varnames
=sharedinfo
.getpropertynames
();5.
for(
x in
names
)
在使用遠端共享物件之前,請確認sharedobject.connect 返回 true,在客戶端呼叫sharedobject.flush 方法只是在本地拷貝了乙份,要確保伺服器端的拷貝,必須在伺服器端使用sharedobject.flush 方法,如:
1.// sample server-side code for flushing a persistent shared object
2.// to the server
3.4..=
function
()5.
8.// when a user disconnects, flush the shared object. 9..
ondisconnect
=function
(client
)10.
如果在同一時間有多個客戶端或者伺服器端在同步遠端共享物件的話,就會出現問題,要解決這個衝突可以通過下面的方法。
1. 使用不同的位置儲存不同使用者的資訊
這是最簡單的一種方法,例如,在室給每個使用者不同的位置存放資料,同步只修改自己的資料部分。
2. 分配資料所有者
複雜一點的方法就是定義乙個使用者為有限的時間內該資料資料的所有者,所有者可以鎖定伺服器端的共享物件,直到返回可用資訊後方可同步另外的資料。下面是示例**:
通過乙個記錄遊戲最高分的應用程式來說明解決同步衝突的問題,當前系統儲存的最高分是95,同時有兩個使用者打破了這個記錄,成績分別為105和110,如果不鎖定最高分的話,兩個成績都會同時執行updatehighscore方法,有可能其中乙個成績會無法記錄下來。使用鎖定共享物件的方法解決了這樣乙個問題。
1..=function
()2.8.}
9..onconnect
=function
(newclient
,name
,passwd
)10.
18..
scoreso
.unlock
();19.
}20.
}
3. 通知客戶端
當伺服器端收到客戶端的同步請求的時候,sharedobject.onsync事件會通知使用者端更改被拒絕,然後提供乙個使用者介面來給使用者解決這種衝突。這種技術通常用於客戶端不是經常更新的情況。
4. 接受某些,拒絕其它的
應用程式根據「先到先服務」的原則來解決同步的衝突問題。通常需要於客戶自己重新請求來解決衝突。
5. 通過send方法來提高控制級別
python教程 對雙向佇列的理解
介紹 deque 是什麼 collections.deque 類 雙向佇列 是乙個執行緒安全 可以快速從兩端新增或者刪除元素的資料型別。而且如果想要有一種資料型別來存 放 最近用到的幾個元素 deque 也是乙個很好的選擇。這是因為在新建乙個雙向佇列的時候,你可以指定這個佇列的大小,如果這個佇列滿員...
關於對測試金字塔的理解收穫共享
關於對測試金字塔的理解收穫共享 前段時間去了 51testing聽了2 天課,講課老師是從微軟外聘的,中間提到乙個測試金字塔的問題,把我原來的一些疑惑 觀點進行了很好的解釋和印證,道理很簡單,但不是每個測試人員都能理解透,故把收穫共享一下。金字塔的結構如下 金字塔分為 5層,最一層的是單元測試,是針...
linux 對父子程序共享檔案描述符的理解
重新回顧一下什麼是檔案描述符 檔案描述符是由無符號整數表示的控制代碼,程序使用它來標識開啟的檔案。檔案描述符與包括相關資訊 如檔案的開啟模式 檔案的位置型別 檔案的初始型別等 的檔案物件相關聯,這些資訊被稱作檔案的上下文。父子程序共享檔案描述符 相當於2個 fd指向同一塊記憶體空間.因為2個程序共享...