2012-07-06 10 views

Respuesta

15

El problema con los trabajadores de la web es que realmente no se ajustan al modelo estándar de GWT/Java; en mi opinión, apenas se ajustan al modelo estándar de JS.

Los trabajadores de la web trabajan transfiriendo datos hacia atrás y hacia adelante entre lo que son esencialmente diferentes máquinas virtuales de JavaScript. Esa información debe tener la forma de una cadena, y cada trabajador debe cargar su JS por separado. Esto significa que ninguna variable declarada en un trabajador (o en la página principal) es accesible desde otra, a menos que se transmita como parte de los datos de cadena, entre los trabajadores.

Entonces, ¿cómo funciona esto cuando se considera GWT/Java? Desde la perspectiva de Java, esto no es equivalente a múltiples hilos, ¡sino a múltiples JVM! Los diferentes procesos solo se pueden comunicar pasando cadenas (o más importante, no objetos Java) hacia adelante y hacia atrás, y no pueden compartir ningún otro estado. Incluso las variables estáticas pueden ser diferentes entre las dos máquinas virtuales.

Desde el enlace informados, echa un vistazo a la fuente de JsWorker - puede crear una instancia de esta vía JsWindow.newWorker con la url del script JS para empezar, y JsWorker soporta métodos para escuchar las respuestas, y para enviarlo mensajes para que funcione.

Ese script podría ser un objeto compilado de GWT, pero sería un módulo y un punto de entrada aparte de la aplicación original, de modo que solo tiene el código razonablemente ejecutable y no intenta comenzar a dibujar en la página cuando se carga Probablemente necesitaría usar un enlazador que solo cargaría el JS, y no asumiría un iframe en la 'página'.

El proyecto GWT-NS ya tiene algunas muestras de trabajadores web, creadas con su propio enlazador para construir archivos js para cargar para cargar en el trabajador, y algunas otras piezas de conveniencia también.

+0

Respuesta perfecta. ¡Gracias! – JAre