flash player中的localConnection有时会随机失败吗?

时间:2009-07-31 09:21:43

标签: flex flash localconnection

我有两部flash动画使用localConnection相互通信,将一个对象从swfA传递给swfB。这似乎工作正常,但偶尔会失败。我们唯一的信息是状态事件以error级别触发,没有其他信息。一旦连接失败,它将继续这样做。

我不知道为什么会这样,但这不是一个安全问题(两部电影都在同一个域上运行),所有通信都包含在try..catch中。

有没有人见过这个或任何人都可以建议另一种方法来进行电影间的通信?我尝试过使用ExternalInterface但是对于发送的更新数量来说太慢了。

3 个答案:

答案 0 :(得分:1)

我们似乎已经解决了问题,但并不完全确定原因(我们可能只是大大减少了失败次数)。我们已实施以下内容:

  • 通过将所有内容移至速度不是问题的externalInterface来减少localConnections的数量
  • 每次刷新页面时附加一个时间戳(而不是重复使用相同的ID),为每部电影生成一个全局唯一的ID。这似乎大大减少了失败的发生(尽管它们确实发生了)
  • 为LocalConnection id添加了'_'(请参阅docs了解原因)。不确定这是否有所帮助,但似乎是一种很好的做法。
  • 每次发生故障时强制重新连接。同样,实现提高健壮性是一件好事,但由于现在没有失败,因此不负责直接修复错误。

所以没有确定的解决方案,它们似乎在一起解决了这个问题。

答案 1 :(得分:0)

LocalConnection很疯狂。它通过您的计算机并与全局剪辑通信。这意味着他们甚至不必在同一页面上。例如,如果您正在运行Air应用程序,则可以与基于浏览器的应用程序进行通信。

请记住,这些ID是全局的,如果它们发生冲突,它们就会出错。当我打开两次相同的swf时,我发生了这种情况(因为它会侦听相同的id)。即使它们在不同的页面上也会发生这种情况。

另一个选择是让swfs轮询服务器并通过数据库进行通信。不确定这是否有帮助。我尽力避免使用LocalConnection:)

答案 2 :(得分:0)

我遇到了同样的问题。我的解决方案是设置一个计时器,尝试重新连接连接,直到找到它。非常简单的计时器,具有在连接成功时设置e.target.stop()的功能。