我正在构建一个Web应用程序,其状态应保持最新,并且在许多设备(Web浏览器,应用程序)上都是可变的。 要了解应用程序:状态主要由音乐播放列表组成,客户可以在其中添加曲目并对其进行投票。主要目标是使其感觉非常“活跃”:状态的更改会立即保留并复制,即当某个用户向播放列表添加曲目时,它应立即显示在所有设备上。
我假设应用程序状态是一个JSON文档,如
{
"playlist" : [
{ "title" : "Lateralus", "upvotes" : 112358 },
{ "title" : "Some other song", "upvotes" : 2 }
]
}
有哪些有效的策略(复制协议,工具)可以实现类似的目标?
最简单的策略是将应用程序状态保持在中央服务器上,并在每次更改时将整个状态推送给每个客户端。当然,这对于大型应用程序状态会给网络带来很大的压力,尽管对于小型应用程序来说可能就足够了。
我想到的其他事情包括定义一组'动作',类似于Redux减速器。我们只传输更改,而不是通过网络传输状态。为了确保所有设备的状态一致,我们必须确保在任何地方以相同的顺序应用相同的操作。
显然,CouchDB已经为也在浏览器中运行的数据库实现了复制协议。我最担心的是我的Web应用程序有无限数量的应用程序状态要管理(一组人共享一个应用程序状态),这导致多个数据库由基础结构处理,这听起来不像是某些东西这是打算做的。但也许这种担忧是没有根据的。
对于像这样的问题,有没有最佳做法?我觉得这不是什么新东西,因为谷歌文档等应用程序可以实现类似的功能。请分享有关架构模式甚至现有解决方案的任何想法。