未在同一SWF中接收多个SharedObject的onSync删除事件

时间:2011-02-27 06:27:32

标签: actionscript-3 flash-media-server wowza shared-objects

我有一个使用Remote SharedObjects的应用程序,我看到一些奇怪的行为。我正在使用Flash Builder在AS3中编写ActionScript应用程序并连接到Wowza Media Server 2.

我的应用程序运行正常,但我现在正在尝试使用FlexUnit为它编写单元测试。我的单元测试涉及创建到同一个远程SharedObject的多个连接,并确保我正确地获得更新。一切似乎都运行良好,除了我没有得到任何带有“删除”的info.code的SyncEvent.SYNC事件。当我在单独的选项卡中独立运行我的应用程序或甚至在同一页面中嵌入的单独swfs时,它工作正常。出于某种原因,虽然它在单元测试中不起作用。我还发现,如果我在同一个SWF中使用Loader加载swfs,那么我会得到相同的行为。在我看来,同一个SharedObject在同一个SWF中的行数是多方面的。我不得不在单元测试中解决其他奇怪的行为,例如oldValues也没有在onSync事件中正确设置。

任何人都有任何想法如何解决这个问题?这是一个已知的问题?我疯了吗? :)

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

在我使用像Cairngorm这样的编码框架处理某些Flex应用程序并使用多个远程对象连接到AMFPHP之前,我也遇到过这个问题。

那时我解决问题的方法是确保不会同时触发这些远程对象。那就是试图让一些所谓的“顺序链”一个接一个地触发这些远程对象。

为了实现这一点,如果从头开始实现这一点,您可能会考虑使用那些现代的ActionScript框架2.0来帮助您(例如SWIZ或Robotlegs)。这可能太复杂,无法在一开始就处理。我建议您可以放置​​远程对象部件以供框架处理,同时保持其他东西不变。

答案 1 :(得分:0)

要获取sharedObject实例,您使用的是静态方法SharedObject.getRemote()。我相信这个方法将始终返回给定名称的相同实例(如果持久性参数具有相同的值)。

当您从应用程序中删除SharedObject(mySO = null)并在垃圾收集器完成其工作之前重新实例化时,您可能遇到同样的问题。

这种行为对我有意义,但有时候我必须承认这是一个问题。无论如何,它应该很容易在调试会话中进行测试(看看你的对象实例编号)。

现在谈论单元测试,你在测试什么? SharedObjects的行为?如果是这样,我相信这里存在一些误解。你真的想测试这种行为(我会对后面的原因感兴趣),然后我想你需要一些更复杂的测试来运行两个独立的应用程序。

希望它有所帮助!

答案 2 :(得分:0)

我们的项目中有与删除类似的行为。 当我们调用so.close()时。然后删除共享对象中的一些键。然后再次连接SO - 它仍然看到已删除的密钥。

变通方法:不要关闭SO或用一些常量值(例如-2)更新已删除的密钥以标记它们被删除。

使用了Wowza 3。

相关问题