我正在构建一个协作绘图板(例如 r/place):有一个像素网格,用户可以随时更改它,并且像素更新会在线传播给所有其他用户。我想使用凤凰频道来广播像素变化。
我的问题是关于当用户连接到服务时如何正确发送当前应用程序状态。
目前我有一个 ETS 表保存绘图板状态。我可以MyChannel.handle_in/3
在广播任何像素写入之前更新此表。
我担心在读取当前状态MyChannel.join
和用户被 Phoenix 订阅频道之间,不同的进程会更新状态。
用户将获得应用程序状态的陈旧版本,并且他们还没有被订阅,因此他们也不会通过 Channel 获得更新。
为了解决这个问题,我认为我需要一种方法来自动读取当前状态,然后订阅 pubsub,确保在该时间段内没有消息写入 ETS 表或 Channel。我猜是锁?是 Elixirey,还是有其他方法?