Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Sincronizar dados de vários processos

Você pode utilizar um único Realm para sincronizar dados de múltiplos processos utilizando o Atlas Device Sync.

Exemplos de cenários em que você pode querer abrir um Realm sincronizado em vários processos incluem:

  • Uma aplicação de desktop com várias janelas, onde cada janela grava no mesmo Realm sincronizado.

  • Uma aplicação de servidor que grava em um Realm sincronizado a partir de vários processos.

Para abrir um único Realm sincronizado a partir de vários processos, execute o seguinte:

  1. Crie um único processo principal que abra um Realm usando uma configuração padrão de Flexible Sync. O processo principal lida com a sincronização.

  2. Crie um ou mais processos secundários que abram o mesmo Realm usando uma configuração de sincronização desconectada. Usando uma configuração de sincronização desconectada, o secundário processa, lê e grava dados no Realm sem lidar com a sincronização. O processo principal lida com a sincronização de todos os dados para o processo secundário.

Para abrir um Realm sincronizado no processo principal, use o Configuration.flexibleSync() construtor. Para obter mais informações, consulte Abrir um Realm sincronizado.

main_process.dart
// Same realm file location as secondary process
final realmPath =
path.join(Configuration.defaultStoragePath, 'synced.realm');
final flexibleConfig =
Configuration.flexibleSync(currentUser, schema, path: realmPath);
final realmWithSync = Realm(flexibleConfig);

Para abrir um domínio sincronizado em um processo secundário, crie um Configuration com o Configuration.disconnectedSync() construtor. Inclua o esquema e quaisquer argumentos nomeados opcionais adicionais.

secondary_process.dart
// Same realm file location as primary process
final sameRealmPath =
path.join(Configuration.defaultStoragePath, 'synced.realm');
final disconnectedSyncConfig =
Configuration.disconnectedSync(schema, path: sameRealmPath);
final realmWithDisconnectedSync = Realm(disconnectedSyncConfig);

Ao compartilhar o mesmo Arquivo de Realm entre vários processos, o Realm tem a atualização automática integrada. Os dados gravados de um processo ficam visíveis para os outros processos. Geralmente, não é necessário escrever lógica adicional para atualizar os dados entre os processos.

No entanto, ocasionalmente, a atualização pode não ocorrer imediatamente. Nesse caso, você pode trigger uma atualização manual em um processo com Realm.refresh() ou Realm.refreshAsync().

Para forçar de forma síncrona as notificações de atualização para alterações feitas por outro processo, chame Realm.refresh().

main_process.dart
// Add object in one process
realm.write(() {
realm.add(Person('John'));
});
secondary_process.dart
// Call realm.refresh() in the secondary process
// to trigger the data written in the main process
// to register in the secondary process.
realm.refresh();
final john = realm.find<Person>('John');

Como alternativa, você pode usar Realm.refreshAsync() para forçar de forma assíncrona as notificações de atualização para alterações feitas por outro processo.

secondary_process.dart
// Asynchronously refresh the realm in the background.
await realm.refreshAsync();
final john = realm.find<Person>('John');

Voltar

Gerenciar sessão de sincronização