Если кто-то имеет дело с подобной проблемой дизайна и нуждается в синхронизации изменений на нескольких устройствах Android, я рекомендую проверить Google Cloud Messaging для Android (GCM).
Я работаю над одно решение, в котором изменения, сделанные на одном клиенте, должны распространяться на других клиентов. И я только что реализовал доказательство реализации концепции (server & amp; client), и это работает как прелесть.
В принципе, каждый клиент отправляет изменения дельты на сервер. Например. Идентификатор ресурса ABCD1234 изменился со значения 100 до 99.
Сервер проверяет эти изменения дельты в своей базе данных и либо одобряет изменение (клиент находится в синхронизации), либо обновляет свою базу данных или отклоняет изменение (клиент отсутствует sync).
Если изменение одобрено сервером, сервер затем уведомляет других клиентов (за исключением тех, кто отправил изменение дельты) через GCM и отправляет многоадресное сообщение с тем же дельта-изменением. Клиенты обрабатывают это сообщение и обновляют свою базу данных.
Прохладно, что эти изменения распространяются почти мгновенно !!! если эти устройства подключены к сети. И мне не нужно внедрять какой-либо механизм опроса для этих клиентов.
Имейте в виду, что если устройство слишком длинное, и в очереди GCM для доставки ожидается более 100 сообщений, GCM отбросит эти и отправит специальное сообщение, когда устройства вернутся в сеть. В этом случае клиент должен выполнить полную синхронизацию с сервером.
Также проверьте этот учебник , чтобы начать с реализации клиента CGM.
Согласно вашему коду, вы упомянули проблему записи как Majority
, а у вас набор реплик из 2 элементов, поэтому большинство будет равно 2. Также вы упомянули значение wtimeout
как 10000 мс (10 секунд). Таким образом, ожидается, что все записи должны быть реплицированы с первичного на вторичный в течение 10 секунд, в противном случае система выдаст сообщение об ошибке, говорящее waiting for replication timed out
.
Отвечая на ваш второй вопрос, да, документы будут успешно обновлены на первичном сервере, сообщение предназначено только для того документа, который не был реплицирован на вторичный сервер в течение указанного wtimeout
времени в мс.