在Web应用程序中,用户可以执行一些我需要异步发送到服务器的任务。基本上,这很容易,但现在我希望它在离线模式下也能正常工作。
我的想法是使用客户端队列,并在网络连接可用时将元素从该队列传输到服务器。
我可以使用PouchDB,但我不需要客户端的所有任务,所以我不想要一个完整的客户端数据库,其中包含服务器所具有的所有元素。我只需要某种队列:把它放在那里,然后尝试将它发送到服务器:如果它有效,则出队,否则在短暂停顿后再试一次。
我怎么能实现这个?有没有像RabbitMQ(概念上的!)可用于浏览器的东西?浏览器内置数据库之上的队列?那样的东西?
或者可以使用PouchDB解决此问题吗?
答案 0 :(得分:0)
PouchDB确实支持单向复制(只做clientDb.replicate.to("http://server/")
),所以如果你已经在服务器上运行CouchDB,它可能是一个快速的&实现任务类型系统排队的简便方法。
您可能希望在复制中使用过滤器,因为当您从客户端db“出列”或删除任务时,您可能不希望将该删除复制到服务器:)此答案是特定的到CouchDB,但它也应该在PouchDB中工作,因为我认为PouchDB确实支持过滤复制:CouchDB replicate without deleting documents。
也就是说,像这样使用PouchDB看起来有点尴尬,完整的复制系统可能比简单的任务排队所需的开销略高。取决于您的应用程序的需求,以及您排队的任务的确切性质!它可以像你push
任务一样简单,并定期检查那里是否有任务,你可以从阵列pop
或shift
发送到服务器
还有async.queue,它通常用在node.js中,但也可以在浏览器中使用(此队列不受任何类型的存储支持,但您可以使用PouchDB或其他客户端添加持久存储分贝)。