Как синхронизировать данные между устройствами в Wi-Fi

Я разрабатываю приложение для iOS и Android. Основной функцией является сохранение определенного набора данных, синхронизированных на всех устройствах в сети Wi-Fi без центрального сервера. Каждое устройство может изменять этот набор данных.

Текущий подход заключается в том, чтобы обнаружить другие устройства через Bonjour/Zeroconf, а затем отправить "сообщения об изменении" всем устройствам через ZeroMQ.

Как и в случае с Framework, возникает много проблем для реализации. Я спрашиваю, является ли это правильным способом для этого.

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

Будет ли какой-то подход Gossip распространять информацию, а также обнаруживать, что все устройства лучше?

Ответ 1

Надежность работы клиент-сервера может быть довольно сложной задачей. особенно кросс-платформенный; всегда есть еще один крайний случай, который необходимо решить. Вместо того, чтобы перестраивать колесо, я рекомендую использовать существующую библиотеку, где кто-то еще разработал все изломы. Я еще не использовал его ни для чего, кроме прототипа, но проект AllJoyn с открытым исходным кодом выглядит очень многообещающим. Другим вариантом является Google API., который на данный момент предназначен только для Android и iOS.

Ответ 2

Простые схемы не соответствуют всем требованиям прямо из коробки.

Ни одна из ролевых асимметрий не может стать сервером по требованию, чтобы принять решение об изменении, как в "Обзор (все голоса)" (рис. org)

Survey / Vote Pattern

или роль-симметрия коалиции-узлов в шаблоне шины " Bus / Routing Pattern отвечает всем требованиям.


Непрерывное обнаружение "Фаза"

- задача, которая должна функционировать как непрерывная самоидентификация, с тем чтобы предоставить Коалиционным узлам соответствующий набор информации, для которого ждать во время голосования, а для кого нет. Взаимодействительно, когда справедливо для трансляции <aListITEM> изменений и ожидать, что голосование будет поддерживаться его соседством "Коалиция-узлов".

Книга с более чем 400 страницами Pieter Hintjens Руководство ZeroMQ - для разработчиков Python, глава 8.3 даст вам некоторые первоначальные сведения об автономном упреждающем и/или совместном открытии, а некоторые замечания по WiFi - в предыдущих главах, Также любезно обратите внимание на заключительные замечания относительно неопределенностей ISO-OSI-L2/L3 в → > Ограничения на обнаружение Wi-Fi SSID L3 на основе ARP


Методы <aListITEM> изменяют распространение по сравнению с текущими коалиционными узлами

- это еще один под-протокол (уровень), который должен быть реализован внутри коалиционных узлов.

sub-protocol

Использует ли автобус или какой-либо гибридный масштабируемый формальный шаблон связи с опросом "Опрос" все требования?

Возможно, да, возможно, нет.

Первый список всех требований, чтобы иметь возможность проектировать "против" такого обязательного набора функций.

Во-вторых, проверить, что набор функций является законным и выполнимым для каждого Node, который будет динамически становиться/перестать быть членом коалиционных узлов. p >

В-третьих, дизайн неблокирующее самовосстанавливающееся сообщество - FSA FSA-FSA - с адекватным подтверждением связи, повторной синхронизацией /watchdog/timeout (s) и распространение обновлений и механизмов голосования, чтобы они соответствовали обязательным конструктивным функциям.

Не полагайтесь на готовые примитивы (при стоимости обязательного набора функций "изгиба", чтобы соответствовать доступному библиотеке примитиву, но скорее разработали еще один > , новая, формальная формация связи с форматом более высокого порядка, собранная из примитивов библиотеки, так что она соответствует всей спецификации.)

Ответ 3

Я не знаю об особенностях вашей проблемы, но:

  • если у вас нет много данных
  • если ваши обновления не очень частые (> 1 требование/с)

может ли работать широковещательное UDP-сообщение?

Если вы запрашиваете сеть и получаете широковещательный адрес, это может быть простым способом распространения/запроса информации без необходимости отправлять ее на каждое устройство в отдельности. Конечно, UDP не является надежным, поэтому вам необходимо реализовать какой-то механизм "запроса", при котором устройство будет запрашивать обновления, как только оно (повторно) подключится к сети.

Только другой, более надежный вариант, о котором я мог подумать, - это использование push-уведомлений платформы. В этом случае Apple/Google позаботятся о том, чтобы ваши сообщения доставлялись, ваша единственная задача - хранить список устройств в "группе" (например, на том же Wi-Fi). Но это решение снова включает в себя наличие центрального сервера и, более того, доступ к Интернету.