2017-01-31 5 views
0

Chromium을 기반으로하는 Electron을 사용하여 오프라인 데스크톱 응용 프로그램을 만듭니다.서비스 작업자를 활성화하기 위해 연결 시간 초과를 만드는 방법이 있습니까?

응용 프로그램은 원격 사이트를 사용하며 우리는 서비스 작업자를 사용하여 사이트의 일부를 오프라인으로 전환합니다. 내가 "비행기 wifi 상황"이라고 부르는 특정 상황을 제외하고 모든 것이 잘되고있다.

찰스를 사용하여 다운로드 대역폭을 100bytes/s로 제한했습니다. 연결은 webview.loadURL을 통해 이루어지며 결국 Chromium에서 LoadURLWithParams이 호출됩니다. 문제는 서비스 작업자가 실패하지 않고 활성화되지 않는다는 것입니다. 요청이 보내지면 응답을 영원히 기다립니다.

내 질문은 특정 시간이 지나면 요청을 시간 종료하고 서비스 작업자가 모든 것을로드하는 것처럼 사용자가 진정으로 오프라인 상태 였는지 여부입니다.

+1

[Jake Archibald] (http://stackoverflow.com/users/123395/jaffa-the-cake)에 대한 [훌륭한 기사] (https://jakearchibald.com/2014/offline-cookbook/)가 있습니다. 제목. 당신을 위해 [제안 제안] (https://jakearchibald.com/2014/offline-cookbook/#serving-suggestions-responding-to-requests) 특히 [캐시 및 네트워크 경쟁] (https : // jakearchibald. co.kr/2014/offline-cookbook/# cache-network-race)은 문제의 정확한 해결책입니다. –

+0

감사합니다 우물, 거기에 좋은 링크! –

답변

1

직접 쓰는 대신 sw-toolbox 라이브러리를 사용할 수 있습니다.이 라이브러리는 서비스 근로자를위한 라우팅 및 런타임 캐싱 전략과 이러한 고급 사용 사례를 돕기위한 기본 제공 옵션을 제공합니다. 특히 networkTimeoutSeconds parameter을 사용하여 이전에 캐시 된 응답으로 폴백하기 전에 네트워크에서 응답을 기다리는 시간을 구성하고자 할 수 있습니다.

당신처럼 사용하여 다음을 수행 할 수 있습니다 URL이 my-api.com을 포함하여 GET 요청을 일치, 자동으로 이전에 캐시 된 응답에 다시 떨어질 네트워크 첫번째 전략을 적용 경로를 구성합니다

toolbox.router.get(
    new RegExp('my-api\\.com'), 
    toolbox.networkFirst, { 
    networkTimeoutSeconds: 10 
    } 
); 

10 초 후.