Как синхронизировать данные между устройствами в Wi-Fi
Я разрабатываю приложение для iOS и Android. Основной функцией является сохранение определенного набора данных, синхронизированных на всех устройствах в сети Wi-Fi без центрального сервера. Каждое устройство может изменять этот набор данных.
Текущий подход заключается в том, чтобы обнаружить другие устройства через Bonjour/Zeroconf, а затем отправить "сообщения об изменении" всем устройствам через ZeroMQ.
Как и в случае с Framework, возникает много проблем для реализации. Я спрашиваю, является ли это правильным способом для этого.
У меня была большая часть логики, реализованной с помощью Bonjour и HTTP-запросов, отправленных на все устройства. Проблема заключалась в просто сетевых запросах, которые не получались бы даже после трех попыток, потому что сеть потерпела неудачу. Я хочу иметь какую-то реконструкцию общего состояния или более надежную структуру обмена сообщениями.
Будет ли какой-то подход Gossip распространять информацию, а также обнаруживать, что все устройства лучше?
Ответы
Ответ 1
Надежность работы клиент-сервера может быть довольно сложной задачей. особенно кросс-платформенный; всегда есть еще один крайний случай, который необходимо решить. Вместо того, чтобы перестраивать колесо, я рекомендую использовать существующую библиотеку, где кто-то еще разработал все изломы. Я еще не использовал его ни для чего, кроме прототипа, но проект AllJoyn с открытым исходным кодом выглядит очень многообещающим. Другим вариантом является Google API., который на данный момент предназначен только для Android и iOS.
Ответ 2
Простые схемы не соответствуют всем требованиям прямо из коробки.
Ни одна из ролевых асимметрий не может стать сервером по требованию, чтобы принять решение об изменении, как в "Обзор (все голоса)" (рис. org)
![Survey / Vote 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). Но это решение снова включает в себя наличие центрального сервера и, более того, доступ к Интернету.