2012-07-06 6 views

Antwort

15

Das Problem mit Web-Arbeitern ist, dass sie nicht wirklich zum Standard-GWT/Java-Modell passen - meiner Meinung nach passen sie kaum zum Standard-JS-Modell.

Web-Mitarbeiter arbeiten, indem sie Daten zwischen den verschiedenen JavaScript-VMs hin und her leiten. Diese Daten müssen in Form einer Zeichenfolge vorliegen, und jeder Worker muss seine JS separat laden. Dies bedeutet, dass auf keine Variablen, die in einem Worker (oder der Hauptseite) deklariert wurden, von einem anderen zugegriffen werden kann, es sei denn, es wird als Teil der String-Daten übergeben und zwischen Arbeitern hin- und hergeschoben.

Wie funktioniert das, wenn Sie GWT/Java betrachten? Aus der Java-Perspektive entspricht dies nicht mehreren Threads, sondern mehreren JVMs! Die verschiedenen Prozesse können nur kommunizieren, indem sie Strings (oder noch wichtiger, nicht Java-Objekte) hin- und hergeben und keinen anderen Status teilen können. Sogar statische Variablen können zwischen den beiden virtuellen Maschinen unterschiedlich sein.

Von den Link Sie auf dem Laufenden, überprüfen Sie die Quelle von JsWorker out - Sie eine Instanz dies über JsWindow.newWorker mit der URL des JS-Skript, mit zu beginnen erstellen können, und JsWorker unterstützt Methoden für Antworten zu hören und sie senden Nachrichten, damit es funktioniert.

Dieses Skript könnte ein GWT-kompiliertes Objekt sein - aber es wäre ein separates Modul und ein Eingangspunkt als die ursprüngliche App, so dass es nur den Code vernünftig ausführen kann und nicht versucht, auf der Seite zu zeichnen wenn es lädt. Es müsste wahrscheinlich einen Linker verwenden, der nur den JS laden würde und keinen Iframe auf der 'Seite' annehmen würde.

Das Projekt GWT-NS hat bereits einige Web-Worker-Beispiele, die mit ihrem eigenen Linker erstellt wurden, um js-Dateien zu erstellen, um sie in den Worker zu laden, und einige andere Convenience-Teile.

+0

Perfekte Antwort. Danke! – JAre