一个服务工作进程停止另一个服务工作进程,反之亦然

Posted

技术标签:

【中文标题】一个服务工作进程停止另一个服务工作进程,反之亦然【英文标题】:One Service Worker Process stop another Service Worker Process and Vice Versa 【发布时间】:2016-05-19 14:40:12 【问题描述】:

我们正在使用 Platinum Service Worker (Google Polymer Element) 来实现我们应用的离线和缓存功能。当我们第一次打开我们的应用程序时,聚合物元素的服务人员开始运行。该应用程序运行良好。

但是,一旦我们订阅了一个信号(第 3 方)以获取推送通知,他们的 Service Worker 就会运行,而我们的白金级 Service Worker 就会停止运行(取消注册)。当我们再次重新加载我们的应用程序时,同样的情况会发生,一个信号服务工作者停止运行(取消注册)并且白金服务工作者开始运行。

我们希望两个 Service Worker 独立工作而不会相互影响。请给我一些建议。

【问题讨论】:

你有没有发现如何最好地集成一个信号?我正在使用 sw-precache 并面临同样的问题。 【参考方案1】:

我们的服务工作者OneSignalSDKWorker.jsOneSignalSDKUpdaterWorker.js覆盖在最顶层(站点根)服务工作者范围内注册的其他服务工作者;是否可以将您的其他服务人员导入我们的服务人员?

这是如何做到这一点的:

目前OneSignalSDKWorker.jsOneSignalSDKUpdaterWorker.js的内容都包含以下内容:

importScripts('https://cdn.onesignal.com/sdks/OneSignalSDK.js');

请同时修改OneSignalSDKWorker.jsOneSignalSDKUpdaterWorker.js 的内容以导入您的其他服务工作者文件,如下所示:

importScripts('https://example.com/my-other-service-worker.js');
importScripts('https://cdn.onesignal.com/sdks/OneSignalSDK.js');

我们建议使用上述方法,而不是将我们的 service worker 导入另一个文件,因为我们的 web SDK 会覆盖在根范围内注册的其他 worker,并用我们的替换它们。

请注意,所有这些仅适用于您尝试将 Service Worker 注册到根范围(例如 https://example.com/other-worker.js)时。如果您尝试仅在特定子目录下注册 Service Worker,例如 https://example.com/some-subdirectory/other-worker.js,则不应替换您的 Service Worker。

更多关于服务工作者can be read here。

【讨论】:

如果我想用 other-service-worker.js 的相对路径导入,还是不行 将其他离线缓存脚本导入一个信号文件的问题是,如果我决定将来从我的应用程序中删除一个信号,数据将被缓存,并且需要我的用户手动清除站点存储并缓存以删除一个信号节点 我正在使用 Sw-precache 并面临与原始海报相同的问题。关于此事@onesignal 的任何更新,因为我的 swpreacche 服务人员每次都被 onesignal SW 覆盖。

以上是关于一个服务工作进程停止另一个服务工作进程,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章

windows 服务主进程是啥?

如何链接 2 个进程,以便当一个进程崩溃时另一个进程也崩溃?

一个jvm中的java进程是不是有可能杀死/停止另一个jvm中的另一个java进程?

.NET IPC 没有服务中介

开发一个基本的命令行实用程序来控制另一个进程[关闭]

3. 进程概念