【问题标题】:Not receiving onSync delete events for multiple SharedObjects in same SWF未收到同一 SWF 中多个 SharedObjects 的 onSync 删除事件
【发布时间】:2011-07-05 03:29:48
【问题描述】:

我有一个使用远程共享对象的应用程序,但我看到了一些奇怪的行为。我正在使用 Flash Builder 在 AS3 中编写一个 ActionScript 应用程序并连接到 Wowza Media Server 2。

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

有人知道我该如何解决这个问题吗?这是一个已知的问题?我疯了吗? :)

不胜感激!

【问题讨论】:

  • 你没疯!今天我也发生了同样的事情,我花了 8 个小时才发现发生了这种情况。我使用了对一个远程 SO 的更多引用,当我删除事件侦听器时,我删除了所有这些,或者当我关闭对 SO 的一个引用时,我关闭了所有.. SharedObject 似乎是非常有问题的单例。
  • 我意识到这是一个旧线程,但它是 2016 年,我遇到了这个问题 - 这个问题有没有解决?

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


【解决方案1】:

在我使用一些编码框架(如 Cairngorm)开发一些 Flex 应用程序并使用多个远程对象连接到 AMFPHP 之前,我也遇到过这个问题。

当时我想解决的问题是确保这些远程对象不会同时被触发。那是试图建立一些所谓的“顺序链”来一个接一个地触发这些远程对象。

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

【讨论】:

    【解决方案2】:

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

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

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

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

    希望对你有帮助!

    【讨论】:

      【解决方案3】:

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

      解决方法:不要关闭 SO 或使用某些常量值(例如 -2)更新已删除的键以将它们标记为已删除。

      使用了Wowza 3。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-20
        • 2014-06-10
        • 2012-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多