2011-02-27 51 views
13

我有一個使用Remote SharedObjects的應用程序,我看到一些奇怪的行爲。我正在使用Flash Builder在AS3編寫一個ActionScript應用程序,並連接到Wowza Media Server 2.未收到同一SWF中多個SharedObject的onSync刪除事件

我的應用程序工作得很好,但我現在正在嘗試使用FlexUnit爲其編寫單元測試。我的單元測試涉及創建到同一個遠程SharedObject的多個連接,並確保我正確地獲取更新。一切似乎都工作得很好,除了我沒有收到任何帶有「delete」的info.code的SyncEvent.SYNC事件。當我在獨立的標籤中獨立運行我的應用程序,或者甚至嵌入在同一頁面中的獨立swf時,它都能正常工作出於某種原因,儘管它在單元測試中不起作用。我也發現,如果我在同一個SWF中使用Loader加載swfs,那麼我會得到相同的行爲。在我看來,對於同一個SharedObject的多個行爲在同一個SWF中行事的方式有些奇怪。我必須在單元測試中解決其他奇怪的行爲,例如oldValues在onSync事件中沒有正確設置。

任何人有任何想法我可以解決這個問題?這是一個已知的問題?我瘋了嗎? :)

將不勝感激任何幫助!

+0

你並不瘋狂!今天同樣發生在我身上,我失去了8小時才發現發生了這種情況。我使用更多的引用到一個遠程SO,當我刪除事件監聽器時,我刪除了所有這些,或者當我關閉一個引用SO時,我關閉了所有.. SharedObject似乎是非常錯誤的單身人士。 – 2011-05-12 21:14:49

+0

我意識到這是一箇舊的線程,但它是2016年,我得到這個問題 - 這是否解決? – Visualife 2016-07-23 21:51:35

回答

0

我在使用Cairngorm等編碼框架工作一些Flex應用程序並使用多個遠程對象連接到AMFPHP時,也遇到了此問題。

那時我想出的解決問題的方法是確保那些遠程對象不會同時被觸發。那就是試圖讓一些所謂的「順序鏈」來逐一激發這些遠程對象。

爲了達到這個目的,如果您從頭開始,可能會很困難,您可以考慮使用那些現代ActionScript 2.0框架來幫助您(例如SWIZ或Robotlegs)。這可能太複雜,不能在最初處理。我建議你可以放置遠程對象部件,由框架來處理,同時保持其他東西不變。

0

要獲得您的sharedObject實例,您正在使用靜態方法SharedObject.getRemote()。我相信這個方法總是會返回給定名稱的同一個實例(如果持久性參數具有相同的值)。

從應用程序中刪除SharedObject(mySO = null)並在垃圾回收器完成其工作之前重新實例化它時,您可能會遇到同樣的問題。

這種行爲對我來說很合理,但它有時可能是一個我必須承認的問題。無論如何,應該很容易在調試會話中進行測試(查看您的對象實例編號)。

現在談論單元測試,你在測試什麼? SharedObjects的行爲?如果是這樣,我相信這裏有一些誤解。你真的想測試這種行爲(並且我會對背後的原因感興趣),那麼我想你會需要一些更復雜的測試來運行兩個單獨的應用程序。

希望它有幫助!

0

我們在我們的項目中有類似的刪除行爲。 當我們調用so.close()。然後刪除共享對象中的某個鍵。然後再次連接SO - 它仍然可以看到已刪除的密鑰存活。

解決方法:不要關閉SO或用一些常量值(例如-2)更新已刪除的鍵以將它們標記爲已刪除。

使用Wowza 3。