Docs Menu
Docs Home
/ /
Device Sync - Flutter SDK

Sincronizar datos de múltiples procesos

Puede utilizar un único reino para sincronizar datos de múltiples procesos mediante Atlas Device Sync.

Algunos ejemplos de escenarios en los que podría querer abrir un reino sincronizado en varios procesos incluyen:

  • Una aplicación de escritorio de múltiples ventanas donde cada ventana escribe en el mismo reino sincronizado.

  • Una aplicación de servidor que escribe en un reino sincronizado desde múltiples procesos.

Para abrir un único reino sincronizado desde múltiples procesos, realice lo siguiente:

  1. Cree un único proceso principal que abra un dominio con una configuración de sincronización flexible estándar. El proceso principal gestiona la sincronización.

  2. Cree uno o más procesos secundarios que abran el mismo dominio mediante una configuración de sincronización desconectada. Con esta configuración, el proceso secundario lee y escribe datos en el dominio sin gestionar la sincronización. El proceso principal gestiona la sincronización de todos los datos del proceso secundario.

Para abrir un reino sincronizado en el proceso principal, utilice el Configuración.flexibleSync()constructor. Para obtener más información, consulte Abrir un dominio sincronizado.

proceso_principal.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 un reino sincronizado en un proceso secundario, cree un Configuration Con el constructor Configuration.disconnectedSync(). Incluya el esquema y cualquier argumento opcional adicional.

proceso_secundario.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);

Al compartir el mismo archivo de dominio entre varios procesos, Realm incorpora la función de actualización automática. Los datos escritos desde un proceso son visibles para los demás. Generalmente, no es necesario escribir lógica adicional para actualizar los datos entre procesos.

Sin embargo, en ocasiones, la actualización puede no realizarse inmediatamente. En ese caso, puede activar una actualización manual en un proceso con Realm.refresh() o Realm.refreshAsync().

Para forzar de forma sincrónica las notificaciones de actualización de los cambios realizados por otro proceso, llame a Realm.refresh().

proceso_principal.dart
// Add object in one process
realm.write(() {
realm.add(Person('John'));
});
proceso_secundario.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');

Alternativamente, puede utilizar Realm.refreshAsync() para forzar de forma asincrónica las notificaciones de actualización de los cambios realizados por otro proceso.

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

Volver

Administrar sesión de sincronización