Это очень интересная проблема. Я наполовину испытывал желание написать что-то, чтобы посмотреть, как это будет работать! (Если бы только у меня было время!)
Во-первых, что касается localConnection, вызывающего утечку, я думаю, что вам действительно придется это проверить, но я думаю, что это возможно, но я справился с LocalConnection в подобных ситуациях и никогда не видел значительных утечек памяти (которые это также означает, что вычисление того, что является утечкой памяти и что медленный GC всегда трудно представить в нетривиальном коде во Flash)
Что касается более крупного вопроса о том, как построить эту вещь, я не могу дать однозначного ответа, но вот несколько идей.
Мне кажется, что поток логики для каждого SWF-файла должен выглядеть примерно так:
- Проверьте, не первый ли я (подключился к каналу управления)
- Если это так, запустите канал управления и скажите JS запустить кометное соединение через ExternalInterface
- Если нет, подключитесь к каналу управления и запросите двустороннее подключение (в этот момент каждый подчиненный SWF-файл будет генерировать случайный идентификатор и отправлять его ведущему устройству - этот идентификатор будет использоваться в качестве имени LC для данных, поступающих из хозяин рабу)
Что касается самовосстановления, я полагаю, вы могли бы сделать что-то похожее на цепную букву. То есть, поскольку каждый SWF-файл подключается к ведущему, он может получить список ведомых. Если соединение когда-либо прервалось, каждый клиент посмотрел бы, где он находится в списке. Если это был первый ведомый в списке, он стал бы ведущим - перезапустил канал управления и сказал JS запустить новое соединение с кометой. Затем каждый ведомый сервер увидит, что сервер вернулся, и вытеснит теперь ведущего из своей цепочки.
Чтобы обработать дыры в цепочке от различных клиентов, выпадающих, мастер координирует это. Поскольку он будет отправлять данные на подчиненные устройства, он сразу же увидит, что клиент отключился. Если клиент все-таки отключится, он просто скажет остальным клиентам удалить этого клиента из своей цепочки.
Надеюсь, это поможет!