2010-04-07 15 views
46

Por lo que entiendo, todo el lado del cliente de una aplicación GWT se convierte a Javascript cuando compila, por lo tanto, supongo que esta pregunta está relacionada tanto con Javascript como con las posibilidades que ofrece GWT.Enhebrado en GWT (Cliente)

Tengo un par de docenas de procesos que deberán iniciarse en mi aplicación GWT; cada proceso hará llamadas continuamente a un servidor. ¿GWT admite el enhebrado? ¿El lado del cliente GWT admite el enhebrado?

EDIT:

Este link estados:

No JavaScript knowledge required If you’re just a user of the framework, 
which I am for the matter of discussion, you do not need to know JavaScript 
in order to write dynamic content, be it client-side such as rolling frames, 
docking panels or scheduled “multi-threading” tasks, or server-side calls 
using XMLHttpRequests (aka AJAX). 

o programadas “multi-threading” tareas, ¿qué significa esto?

+1

sobre la cuestión no es una indicación de si se trata de una pregunta útil, sino más bien si la pregunta se * bien escrito *, incluyendo una descripción clara, suministrado detalles , y alguna indicación de que el autor ya ha intentado encontrar la respuesta por sí mismo. Ahora, estoy ** no ** diciendo que sus preguntas no cumplen esos requisitos, solo explicando cómo los votos para las preguntas y las respuestas son diferentes. –

Respuesta

34

JavaScript no es compatible con multihilo. Sin embargo, GWT tiene una clase para 'simular' el enhebrado, que no es un multihilo real, pero en la mayoría de los casos hace lo que necesita: com.google.gwt.core.client.Scheduler.ScheduledCommand. La técnica se basa en la clase de temporizador, que ejecuta un método una vez transcurrido el tiempo determinado.

Por ejemplo, cuando se coloca el siguiente código en que el propio código, el método scheduleDeferred volverá directamente y su código continúa después de la orden, mientras se ejecuta el método execute() usando el temporizador:

Scheduler.get().scheduleDeferred(new ScheduledCommand() { 
    public void execute() { 
     .. code here is executed using the timer technique. 
    } 
}); 

Puede crea un comando repetitivo RepeatingCommand, que se puede usar para ejecutar el comando más de una vez. Comience con Scheduler.get().scheduleIncremental() que ejecutará el comando hasta que el método de ejecución devuelva false. Puede usar esto para dividir tareas en tareas secundarias para obtener un mejor comportamiento de "enhebrado". El Scheduler admite algunos métodos adicionales para iniciar un comando programado de manera diferente. Vea el JavaDoc para más detalles.

Editado y actualizado con la nueva clase GWT en lugar del obsoleto DeferredCommand.

+1

Corrígeme si me equivoco, pero puedo usar los subprocesos de Java en el lado del servidor, ¿correcto?Si esto es correcto, entonces creo que su respuesta me ha ayudado mucho, porque creo que podría rediseñar mi sistema en torno a DeferredCommand en el lado del cliente y en Java Threads en el lado del servidor. – Federer

+0

Lo más probable es que no pueda usar subprocesos en el servidor, ya que el servidor no permite la creación de subprocesos. Pero cada llamada al servidor desde el navegador iniciará un 'subproceso', y es probable que solo sea necesario un subproceso si desea iniciar un proceso que no está relacionado con una llamada desde el navegador o si no desea que se realice la llamada desde el navegador. el navegador para esperar la respuesta del servidor. Pero, en general, todo depende de lo que intente hacer con su aplicación. –

+2

¿qué quiere decir con * "el servidor no permite crear subprocesos" *? ¿Cual servidor? No digo que sea una buena práctica, pero si Tomcat no tiene políticas de seguridad que impidan explícitamente la creación de subprocesos, puede crear subprocesos en el lado del servidor como en cualquier programa Java, no? – SyntaxT3rr0r

0

JavaScript no es compatible con el multihilo, por lo que sea que GWT lo haga, el multihilo debe hacerse únicamente en el lado del servidor, porque GWT solo puede usar características que ya están disponibles en el lado del cliente.

3

Hay trabajo en Web Workers como parte de HTML5 que se implementa en varios navegadores, pero no en todos (más notablemente Internet Explorer). Puede usar estas funciones cuando estén disponibles, pero lo que debe hacer es mirar el modelo de programación javascript.

Javascript generalmente funciona de forma asíncrona. Las solicitudes se disparan y en algún momento sus respuestas se reciben como un evento. Puede tener una gran cantidad de solicitudes pendientes al mismo tiempo. Esto requerirá un poco de rediseño de tu sistema.