Как синхронизировать состояние приложения на нескольких телефонах в одной сети? - PullRequest
2 голосов
/ 03 мая 2011

Я занимаюсь разработкой приложения для iPhone, которое позволяет в основном выполнять серию действий. Эти серии предопределены и синхронизированы с общим сервером конфигурации.

Это приложение может быть запущено на нескольких устройствах одновременно. Предполагается, что все устройства имеют одинаковую последовательность действий, определенных на них. Все устройства считаются равными, здесь нет сервера и нескольких клиентов или что-то в этом роде.

(Только) одно из этих устройств используется человеком в любой момент времени, однако, возможно, что человек переключается на другое устройство в любой момент времени. Все «пассивные» устройства должны быть синхронизированы с активным, чтобы они отображали одно и то же действие.

Все должно происходить как можно более автоматически. Нет выбора устройств, конфигурации, все устройства в одной сети участвуют в одной серии действий.

Одним дополнительным требованием является то, что устройство может присоединиться во время презентации (серии действий) и должно перейти к текущему активному действию.

Прямо сейчас я вижу два варианта реализации сетевой / коммуникационной части этого:

  • Bonjour. Я реализовал работающий прототип, который может автоматически соединяться с одним (1) другим устройством в сети и связываться с ним. Я не уверен на данный момент, сколько дополнительной работы требует требование «нескольких устройств». Должен ли я открыть набор подключений для каждого устройства и вручную отправить события синхронизации всем им? Есть ли лучший способ или Bonjour предоставляет что-нибудь, чтобы помочь мне с этим? Что Bonjour предоставляет, учитывая, что я все равно хочу общаться с каждым устройством в сети?

  • Многоадресная рассылка с AsyncUdpSocket. Просто определите порт и отправьте события многоадресной синхронизации на этот порт. Я думаю, что основная проблема по сравнению с использованием Bonjour с tcp заключается в том, что соединение небезопасно и пакеты могут быть потеряны. Это, однако, в частной защищенной сети WLAN с низким трафиком, если это действительно будет проблемой. Есть ли другие недостатки, которых я не вижу? Потому что на данный момент это звучит как относительно простой вариант ...

Какой бы вы предложили? Или есть другая, лучшая альтернатива, о которой я не думаю?

Ответы [ 3 ]

2 голосов
/ 16 мая 2011

Вы должны проверить GameKit (встроенный в iOS) - они имеют много необходимого оборудования в удобной упаковке. Вы можете легко находить одноранговые узлы в сети и легко отправлять данные вперед-назад между клиентами (широковещательная или одноранговая)

1 голос
/ 16 мая 2011

По моему опыту Bonjour идеально подходит для того, что вы хотите.Существует превосходное учебное пособие с соответствующим исходным кодом: Chatty , которое можно легко изменить в соответствии с вашими целями.

0 голосов
/ 19 мая 2011

Я собрал распределенную шину сообщений для iphone (без централизованного сервера), которая отлично подойдет для этого.Следует отметить, что парень из пользовательского интерфейса сделал беспорядок в коде, так что там будут драконы: https://code.google.com/p/iphonebusmiddleware/

Основная идея состоит в том, чтобы использовать Bonjour для формирования сети с выбором лидера.Лидер становится центром, через который все рабы подписываются на интересующие темы.Затем любое сообщение, отправленное на заданную тему, доставляется каждому узлу, подписанному на указанную тему.Простое отключение от мастера означает возобновление процесса выборов лидера.

...