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