我可以使用代码将ServiceWorker同步保留吗?

时间:2017-01-10 11:31:48

标签: html5 synchronization service-worker

好的,我们有一个离线的第一个应用程序,可以调用后端API。

我们希望在应用程序脱机时使用Service Worker的同步来缓存对API的调用,然后在浏览器重新联机时处理这些调用。

复杂的是,当我们进行API调用时,我们需要有一个有效的OWIN令牌。

有一个解决方案outlined here表示我们可以在需要时获取令牌;但这对我们的应用程序不起作用,因为我们每个用户只允许一个活动会话。 因此,如果我们在代码中获得令牌,我们就有可能踢出当前在应用程序上忙碌的真实用户。

所以问题是: - 我们可以让服务工作者同步在代码中暂停,如下所述吗?

  1. 当用户在应用程序中结束会话时,我们会告诉服务工作者同步过程“在我们的代码中停止”。
  2. 此时,同步过程必须跟踪需要处理的所有调用,但不处理任何调用。此外,任何其他同步调用都应该“添加到队列中”。

    1. 当下一个用户获得有效的OWIN令牌时,我们可以告诉同步过程“照常继续”。
    2. 到目前为止,我的Google搜索没有返回任何明确处理此内容的内容;但大多数文件都暗示这是不可能的。

      有没有人确定这是否可行?

1 个答案:

答案 0 :(得分:1)

好的,所以从上面的讨论,以及其他离线讨论; 这个问题的简单回答是" No" - 截至2017年1月13日(是的,星期五);您无法暂停服务工作者同步。

所以作为一种解决方法;我们可以找到两种方法

(两者都涉及在某种程度上重新考虑解决方案)。

  1. 如果可能,请从同步代码中获取新的OWIN身份验证令牌。
  2. 如果无法执行1,则将API调用分为3类。
  3. 2.1接听电话;这些可以通过服务工作者的标准缓存机制进行处理。

    2.2可以忽略响应的非Get调用。这些可以添加到IndexedDB表中,并且可以在用户连接到数据库之后启动web-worker来处理它们。

    2.3需要响应的非Get调用。这些事情不会经常发生;因此,对于每种情况,都要为在线/离线情况编写单独的代码路径。

    关于它;选项2适用于我当前的项目。可能存在选项2仍然不可行的项目。