Docs Menu
Docs Home
/ /
Atlas Device 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에는 자동 새로 고침 기능이 내장되어 있습니다. 한 프로세스에서 기록된 데이터는 다른 프로세스에서 볼 수 있습니다. 일반적으로 프로세스 간에 데이터를 새로 고치기 위해 추가 로직을 작성할 필요가 없습니다.

그러나 경우에 따라 새로 고침이 즉시 수행되지 않을 수 있습니다. 이 경우 trigger 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');

돌아가기

동기화 세션 관리