Enhebrado en GWT(Cliente)
multithreading (4)
Por lo que entiendo, todo el lado del cliente de una aplicación GWT se convierte a Javascript cuando se compila, por lo tanto, supongo que esta pregunta está relacionada tanto con Javascript como con las posibilidades que ofrece GWT.
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?
EDITAR:
Este link dice:
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 tareas programadas de "multi-threading" , ¿qué significa esto?
Hay trabajo en Web Workers como parte de HTML5 que se implementa en varios navegadores, pero no en todos (especialmente 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.
JavaScript no es compatible con el multihilo, por lo que sea lo que sea que GWT haga, el multihilo debe hacerse únicamente desde el lado del servidor, porque GWT solo puede usar características que ya están disponibles en el lado del cliente.
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, al colocar el siguiente código en su propio código, el método scheduleDeferred
diferido regresará directamente y su código continuará después del comando, mientras que el método execute()
se ejecutará utilizando el temporizador:
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
public void execute() {
.. code here is executed using the timer technique.
}
});
Puede crear 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 de GWT en lugar del obsoleto DeferredCommand
.
Nueva forma es usar un Scheduler