Docs Menu
Docs Home
/ /
Device Sync - Flutter SDK

여러 프로세스의 데이터 동기화

Atlas Device Sync를 통해 단일 영역으로 여러 프로세스의 데이터를 동기화할 수 있습니다.

여러 프로세스에서 동기화된 영역을 열려고 하는 시나리오의 예는 다음과 같습니다.

  • 각 창이 동일한 동기화된 영역에 기록하는 다중 창 데스크톱 애플리케이션입니다.

  • 여러 프로세스에서 동기화된 영역에 쓰는 서버 애플리케이션입니다.

여러 프로세스에서 동기화된 단일 영역을 열려면 다음을 수행합니다.

  1. 표준 flexible sync 구성을 사용하여 Realm을 여는 단일 메인 프로세스 를 만듭니다. 메인 프로세스는 동기화를 처리합니다.

  2. 연결이 끊긴 동기화 구성을 사용하여 동일한 영역을 여는 하나 이상의 세컨더리 프로세스 를 만듭니다. 연결이 끊긴 동기화 구성을 사용하면 세컨더리 프로세스는 동기화를 처리하지 않고 영역에 데이터를 읽고 씁니다. 메인 프로세스는 세컨더리 프로세스에 대한 모든 데이터의 동기화를 처리합니다.

메인 프로세스 에서 동기화된 영역 열려면 Configuration.flexibleSync() 생성자를 사용합니다. 자세한 내용은 동기화된 Realm 열기를 참조하세요.

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

세컨더리 프로세스 에서 동기화된 영역 열려면 Configuration Configuration.disconnectedSync() 생성자를 사용하여 을 만듭니다. 스키마 와 추가 선택적 명명 인수를 포함합니다.

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

여러 프로세스 간에 동일한 Realm 파일을 공유하는 경우, Realm에는 자동 새로 고침 기능이 내장되어 있습니다. 한 프로세스에서 기록된 데이터는 다른 프로세스에서 볼 수 있습니다. 일반적으로 프로세스 간에 데이터를 새로 고치기 위해 추가 로직을 작성할 필요가 없습니다.

그러나 경우에 따라 새로 고침이 즉시 수행되지 않을 수 있습니다. 이 경우 Realm.refresh() 또는 Realm .refreshAsync()를사용하여 프로세스 에서 수동 새로 고침을 트리거하다 할 수 있습니다.

다른 프로세스의 변경 사항에 대한 업데이트 알림을 동시에 강제하려면 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');

또는 Realm.refreshAsync() 를 사용하여 다른 프로세스의 변경 사항에 대한 업데이트 알림을 비동기적으로 강제할 수 있습니다.

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

돌아가기

동기화 세션 관리