移动客户端Web应用程序(html / js),它向跟踪端点发出PUT http请求。该应用程序建立在cordova之上,使用vuejs vuex,superagent和localforage
当客户端处于脱机状态时,请求最终会超时,并且传输的信息将丢失。
我认为下一步是提示请求,我的问题是这个逻辑属于哪里。
解释同样的问题我已经被告知这应该在服务工作者上实施,但是阅读它我从没有看到使用它的任何好处,因为客户端应用程序不依赖于响应使用像缓存响应之类的东西不能解决我的问题。
另一方面,我认为这可以通过在设备上存储请求提示并在成功发送到服务器后删除来实现。
答案 0 :(得分:2)
您的方法应该是将数据存储在本地存储器中,即cache or IDB
,然后在sync event
中注册serviceWorker
。因此,当您的应用再次联机时,sync
事件将负责该任务。
以下是一个例子:
在您要存储的应用程序内:
if ('serviceWorker' in navigator && 'SyncManager' in window) {
navigator.serviceWorker.ready
.then(function(sw) {
var post = {
data: 'Some Data'
};
writeData('sync-posts', post) //save in local storage
.then(function() {
return sw.sync.register('sync-new-posts');
})
.then(function() {
// display that post was saved for background sync (purely optional)
})
.catch(function(err) {
console.log(err);
});
});
} else {
sendData(); //in-case browser is incompatible
}
在serviceWorker
内做这样的事情:
self.addEventListener('sync', function(event) {
console.log('[Service Worker] Background syncing', event);
if (event.tag === 'sync-new-posts') {
console.log('[Service Worker] Syncing new Posts');
event.waitUntil(
readAllData('sync-posts') //reading from local storage
.then(function(data) {
// upload the data & free up the storage
})
);
}
});
管理ServiceWorker
的工具:WorkBox