Closed17

yjsについて調べる

bisquebisque

yjs

https://github.com/yjs/yjs

A CRDT framework with a powerful abstraction of shared data

共有データの強力な抽象化を備えた CRDT フレームワーク

bisquebisque

CRDTってなんだろう

https://github.com/yjs/yjs?tab=readme-ov-file#yjs-crdt-algorithm

Conflict-free replicated data types (CRDT)

競合のない複製されたデータ型 らしい。

共有データアルゴリズムの対比としてoperational transformation (OT) がある。

  • OT: 中央サーバーがデータを管理。
  • CRDT: 分散システムに適している。

説明の意味は、まだ知識が浅く理解できない。

bisquebisque

平たくいうとyjsはCRDTの実装らしい。テキスト編集に適したように、アルゴリズムは多少変更しているらしい。

bisquebisque

(めちゃくちゃ雑な理解)yjsは他のクライアントとデータ同期する際に差分を交換して最新の状態を作る。データのidにはclient識別子とLamport timestampの組み合わせが使われる。

bisquebisque

開発者向けドキュメント

https://docs.yjs.dev/

bisquebisque

シグナリングサーバーというサーバーが必要。

同じシグナリングサーバーに接続するピアは、他のユーザーを認識できるらしい。
https://github.com/yjs/y-webrtc

シグナリングサーバーの実装例
https://github.com/yjs/y-webrtc/blob/master/bin/server.js

topic(共同編集の対象)をサブスクライブして、イベントがあったらサブスクライバーにメッセージを送るような仕組みらしい。ここでユーザーを特定して共有範囲を制御できそう。

WebRTCのサンプルのはずがWebSocketで実装されている。WebRTCがよくわかってない。

シグナリングサーバーのサーバーレス環境の実装例
https://medium.com/collaborne-engineering/serverless-yjs-72d0a84326a2

こちらはシグナリングサーバーがWebRTCで実装されている。
こちらでもAPI GatewayのWebSocket APIが使われている。

bisquebisque

話をy-webrtcに戻る。

このサンプルは、シグナリングサーバーはWebSocket、yjsのデータ通信はWebRTCという組み合わせで実装されているということが分かった。

シグナリングサーバーの publish イベントとはなんなのだろう。

ここで送信されている。y-webrtc.js の内部実装の話なので一旦置いておこう。
https://github.com/yjs/y-webrtc/blob/master/src/y-webrtc.js#L469

bisquebisque

yjsの概念がふわっとわかった。次はCodeMirrorのリアルタイムコラボレーションのデモを実装してみようかな。

このスクラップは1ヶ月前にクローズされました