在Web应用程序中,用户可以执行一些我需要异步发送到服务器的任务。基本上,这确实很容易,但是现在我希望它在脱机模式下也能正常工作。
我的想法是使用客户端队列,如果网络连接可用,则将元素从该队列传输到服务器。
我可以使用PouchDB,但是我不需要客户端上的所有任务,因此我不希望具有服务器所有元素的完整客户端数据库。我只需要某种队列即可:将其放入其中,然后尝试将其发送到服务器:如果可行,请出队,否则请稍等片刻后重试。
我该如何实施?浏览器是否有RabbitMQ之类的工具(概念上是!)?浏览器内置数据库之上的队列?像那样的东西?
还是可以使用PouchDB解决此问题?
最佳答案
PouchDB确实支持单向复制(只需clientDb.replicate.to("http://server/")
即可),因此,如果您已经在服务器上运行CouchDB,则这可能是实现系统任务类型队列的一种快速简便的方法。
您可能需要在复制中使用过滤器,因为当您从客户端数据库“出队”或删除任务时,您可能不想将该删除复制到服务器:)此答案特定于CouchDB,但它也应该在PouchDB中工作,因为我认为PouchDB确实支持过滤复制:CouchDB replicate without deleting documents。
就是说,像这样使用PouchDB似乎有点尴尬,并且完整复制系统的开销可能比简单排队任务所需的开销还要大。取决于应用程序的需求以及排队的任务的确切性质!它可能很简单,就像您将push
任务放入一个阵列中,并定期检查其中是否有任务,您可以pop
或shift
将其从阵列中移出并发送到服务器。
还有async.queue,它通常在node.js中使用,但也可以在浏览器中使用(此队列不由任何类型的存储支持,但是您可以使用PouchDB或另一个客户端db添加持久存储)。
关于javascript - 在数据库顶部的Web浏览器中排队?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21093954/