2016-06-10 11 views
4

Ich weiß, dass Sie WebSocket-Verbindungen innerhalb eines Service Worker selbst erstellen können; Meine Frage ist mehr, ob Sie einen WebSocket wie gewohnt von Ihrer App aus verwenden können und der Service Worker WebSocket-Anfragen abfangen/zwischenspeichern kann, genau wie bei normalen HTTP-Abrufanforderungen.Ist es möglich, WebSocket-Nachrichten in einem Service Worker abzufangen und zwischenzuspeichern, wie alle Beispiele für normale HTTP-Anfragen?

Hier ist ein Beispiel zum Abfangen und Zwischenspeichern einer normalen HTTP-Anfrage von einem Service Worker.

Wie würde ich den Service Worker einrichten, wenn alle meine Anforderungen über WebSockets waren?

+0

Ich denke, Sie sollten versuchen, für Nachricht Ereignis ie. 'self.addEventListener ('Nachricht', Funktion (e) {console.log (e);});' Haben Sie einen funktionierenden WebSockets-Beispielcode, den Sie einfügen könnten? –

Antwort

4

Es ist nicht möglich, dass ein Service-Mitarbeiter den Web-Socket-Verkehr abfängt.

Das fetch-Ereignis des Service-Mitarbeiters wird nur für HTTPS-Anfragen von kontrollierten Clients ausgelöst, und das message-Ereignis wird nur für postMessage()-Anfragen von Clients ausgelöst.

Während there is an HTTP handshake, wenn eine Web-Socket-Verbindung initiiert, dass Handshake löst keine fetch Handler, und auch nicht der tatsächliche Verkehr, sobald die Verbindung hergestellt wurde gesendet.

0

Ich denke, man sollte fetch für das erste Laden der Seite verwenden, so dass seine Daten zwischengespeichert und vom Service-Mitarbeiter zurückgegeben werden können, wenn Sie offline sind.

So initiieren Sie die Websocket-Verbindung nur, wenn Sie online sind. Keine Notwendigkeit, Daten dann zwischenzuspeichern.

Und Sie Fallback in Speichern von Nachrichten im Cache auf der App-Seite, wenn es nicht über Socket senden kann.