私は共同製図ボードを作成しています(例:r/place):ユーザーがいつでも変更できるピクセルグリッドがあり、ピクセルアップデートが他のすべてのユーザーはオンラインです。私はピクセル変更をブロードキャストするためにフェニックスチャンネルを使用したいと思います。フェニックスチャンネル(またはその他のpubsub)に参加中にアプリケーションの状態を同期させる
私の質問は、どのようにになるのですか。は、ユーザーがサービスに接続するときに現在のアプリケーションの状態を送信します。
現在、私は描画ボードの状態を保持しているETSテーブルを持っています。ピクセル書き込みをブロードキャストする前に、このテーブルをMyChannel.handle_in/3
に更新することができます。
私の恐怖は間でがMyChannel.join
で現在の状態を読み取り、ユーザは、異なるプロセス状態を更新し、フェニックスによってチャンネルに登録されていることです。
ユーザーはアプリケーション状態の古いバージョンを取得し、まだ購読していないため、チャネル経由で更新を取得しません。
これを解決するには、現在の状態を原子的に読み取ってからpubsubにサブスクライブする方法が必要であり、メッセージがその期間のETSテーブルまたはチャネルに書き込まれないようにする必要があると思います。私はロックを推測する?それはElixireyですか、別の方法ですか?