실시간 업데이트
API와 같은 호스트로 WebSocket을 열면 레코드가 바뀔 때 Fóir가 애플리케이션에 알려 줍니다. 각 이벤트에는 바뀐 대상의 id가 담기며, SDK는 이를 쿼리 캐시 업데이트로 바꿀 수 있습니다.
소켓 하나, 같은 키
구독은 API 자체 호스트에서 graphql-ws 프로토콜을 사용하며, 쿼리와 뮤테이션에 쓰는 것과 같은 API 키를 사용합니다. 자격 증명은 연결이 열릴 때 전송됩니다. 키, 그리고 로그인한 사용자가 있으면 그 사용자의 액세스 토큰입니다. 소켓 하나는 최대 32개의 라이브 구독을 유지합니다.
이벤트에는 id가 담깁니다
레코드 이벤트에는 동작(created, updated, published, unpublished, deleted), 레코드의 id, 모델이 담깁니다. 무엇이 바뀌었는지만 식별하고 콘텐츠는 담지 않으므로, 레코드는 일반 API로 읽습니다. 각 이벤트에는 프로젝트별로 커밋 순서에 따른 시퀀스 번호도 있습니다. 구독할 때 적용한 가장 높은 번호를 전달하면 서버가 놓친 내용을 내구성 있는 로그에서 재전송한 뒤 실시간으로 이어 갑니다.
SDK의 구독 클라이언트
타입 지정 SDK는 모델마다 onChange 메서드를 제공하며, 구독 해제용 핸들을 반환합니다. 첫 구독에서 소켓을 열고 마지막 구독이 끝나면 닫습니다. 연결이 끊기면 지수 백오프로 재연결하고 라이브 구독을 다시 보냅니다.
라이브 모듈
@foir/sdk/live 모듈은 변경 스트림을 쿼리 캐시에 연결하며 React 바인딩이 있습니다. 편집하면 해당 레코드를 가진 쿼리만 다시 가져오고, 삭제는 메모리에서 적용되며, 생성은 개수로 보고됩니다. 모델마다 선택해서 사용합니다.