[]
이 문서는 서버 측에서 DocumentServices를 초기화하는 방법을 설명하며, 다음 내용을 포함합니다.
의존성 설치
서버 인스턴스 생성
OT 기능 구성
npm을 통해 필요한 의존성 패키지를 설치합니다.
npm install @mescius/js-collaboration @mescius/js-collaboration-otjs-collaboration: 기본 서버 기능과 Server 클래스를 제공합니다.
js-collaboration-ot: documentFeature 및 OT 타입 관리를 포함한 OT 기능을 제공합니다.
OT 타입 등록
서버를 시작하기 전에 작업 동작을 정의하기 위해 OT_Types을 등록해야 합니다. 다음은 간단한 텍스트 타입을 등록하는 예제입니다.
import { TypesManager } from '@mescius/js-collaboration-ot';
const textType = {
uri: 'rich-text-ot-type'
create: (data) => data || '',
transform: (op1, op2, side) => {
if (op1.pos < op2.pos) return op1;
return { pos: op1.pos + op2.text.length, text: op1.text };
},
apply: (snapshot, op) => {
return snapshot.slice(0, op.pos) + op.text + snapshot.slice(op.pos);
}
};
TypesManager.register(textType);서버 인스턴스 생성
js-collaboration의 Server 클래스를 사용하여 서버 인스턴스를 생성합니다.
import { Server } from '@mescius/js-collaboration';
const server = new Server({ port: 8080 });역할: 서버를 초기화하고 WebSocket 연결을 수신합니다.
OT 기능 통합
js-collaboration-ot의 documentFeature를 사용하여 서버에 OT 기능을 추가합니다.
import { documentFeature } from '@mescius/js-collaboration-ot';
// OT 기능 통합
server.useFeature(documentFeature());매개변수
service (선택 사항): 사용자 지정 데이터베이스 및 구성을 위한 DocumentServices 인스턴스(고급 구성 참조).
역할: OT 문서 기능을 활성화하여 서버가 작업과 스냅샷을 처리할 수 있도록 합니다.
다음은 서버 초기화의 전체 예제입니다.
import { Server } from '@mescius/js-collaboration';
import { documentFeature, TypesManager } from '@mescius/js-collaboration-ot';
// OT 타입 정의
const textType = {
uri: 'text',
create: (data) => data || '',
transform: (op1, op2, side) => {
if (op1.pos < op2.pos) return op1;
return { pos: op1.pos + op2.text.length, text: op1.text };
},
apply: (snapshot, op) => {
return snapshot.slice(0, op.pos) + op.text + snapshot.slice(op.pos);
}
};
// OT 타입 등록
TypesManager.register(textType);
// 서버 생성
const server = new Server({ port: 8080 });
// OT 기능 통합
server.useFeature(documentFeature());
// 선택 사항: 연결 이벤트 수신
server.on('connect', ({ connection }) => {
console.log(`클라이언트 ${connection.id}가 연결되었습니다`);
});OT 동작이나 데이터 저장 방식을 사용자 지정해야 하는 경우, DocumentServices를 구성한 후 documentFeature에 전달할 수 있습니다.
import { documentFeature, DocumentServices, MemoryDb } from '@mescius/js-collaboration-ot';
// DocumentServices 구성
const docService = new DocumentServices({
db: new MemoryDb(), // 인메모리 데이터베이스 사용
submitSnapshotBatchSize: 50 // 스냅샷 제출 배치 크기
});
// OT 기능 통합
server.useFeature(documentFeature(docService));매개변수 (IDocConfig):
db: 데이터베이스 어댑터(기본값은 MemoryDb)
maxSubmitRetries: 작업 제출의 최대 재시도 횟수(기본값: 무제한)
submitSnapshotBatchSize: 스냅샷 제출 배치 크기(기본값: 100)