1

在Web應用程序中,用戶能夠執行一些我需要異步發送到服務器的任務。基本上,這很容易,但現在我希望它能夠在離線模式下正常工作。隊列在數據庫之上的webbrowser?

我的想法是使用客戶端隊列,並在網絡連接可用時將該隊列中的元素傳輸到服務器。

我可以使用PouchDB,但我並不需要客戶端的所有任務,所以我不想要一個完整的客戶端數據庫以及服務器的所有元素。我只需要某種類型的隊列:將它放在那裏,並嘗試將它發送到服務器:如果它工作,請先出隊,否則在短暫停頓後再試一次。

我該如何實現?是否有像瀏覽器可用的RabbitMQ(概念上的)?瀏覽器內置數據庫頂部的隊列?像那樣的東西?

或者可以使用PouchDB解決這個問題嗎?

回答

0

PouchDB確實支持單向複製(只做clientDb.replicate.to("http://server/")),所以如果你已經在你的服務器上運行CouchDB,它可能是一個快速實現系統任務類型排隊的簡單方法。

您可能會希望在複製時使用過濾器,因爲當您從客戶端數據庫「出列」或刪除任務時,您可能不希望將該刪除複製到服務器:)此答案爲特定於CouchDB,但它也應該在PouchDB中工作,因爲我認爲PouchDB確實支持過濾複製:CouchDB replicate without deleting documents

也就是說,像這樣使用PouchDB看起來有些尷尬,而且完整的複製系統可能比簡單的任務排隊所需要的開銷稍高一點。取決於你的應用需求是什麼,以及你排隊的任務的確切性質!它可以像您的push任務所進入的陣列一樣簡單,並定期檢查是否有任務存在,您可以將popshift關閉併發送到服務器。

還有async.queue,它通常在node.js中使用,但也適用於瀏覽器(該隊列不受任何類型的存儲支持,但可以使用PouchDB或其他客戶端數據庫添加持久性存儲)。