这是一个非常有趣的问题。我很想编写一些代码来看看它是如何工作的!(要是我有时间就好了!)
首先,至于 localConnection 导致泄漏,我认为您确实必须对其进行测试,但是我认为这是可能的,但是我在类似情况下对 LocalConnection 做了很多工作,并且从未见过严重的内存泄漏(这也是比如说,在 Flash 中的非平凡代码中总是很难弄清楚什么是内存泄漏以及什么是 GC 变慢)
至于如何构建这个东西的更大问题,我无法给出明确的答案,但这里有一些想法。
在我看来,每个 SWF 的逻辑流程必须是这样的:
- 检查我是否是第一个(连接到控制通道)
- 如果是,则启动控制通道并告诉 JS 通过 ExternalInterface 启动彗星连接
- 如果没有,连接到控制通道并请求双向连接(此时每个从 SWF 将生成一个随机 ID 并将其发送到主控 - 此 ID 将用作从主控到从属的数据的 LC 名称)
对于处理自我修复方面,我想你可以做一些类似于连锁信的事情。也就是说,当每个 SWF 连接到主服务器时,它可以接收到从服务器的列表。如果连接断开,每个客户端都会查看它在列表中的位置。如果它是列表中的第一个从属设备,它将接管为主设备 - 重新启动控制通道,并告诉 JS 启动一个新的彗星连接。然后,每个其他的奴隶都会看到服务器回来了,并将现在的主人从他们的链中出列。
为了处理来自不同客户下线的链中的漏洞,主人会协调它。由于它将向从属设备发送数据,因此它会立即看到客户端是否下线。如果客户确实放弃了,它只会告诉其他客户从他们的链中删除该客户。
希望这可以帮助!