Threading в GWT (клиент)
Из того, что я понимаю, вся клиентская сторона приложения GWT преобразуется в Javascript при его создании, поэтому я полагаю, что этот вопрос связан как с Javascript, так и с возможностями, которые предлагает GWT.
У меня есть несколько десятков процессов, которые нужно будет инициировать в моем приложении GWT, каждый процесс будет непрерывно звонить на сервер. Поддерживает ли GWT резьбу? Поддерживает ли клиентская сторона GWT потоки?
EDIT:
Эта ссылка указывает:
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).
или запланированные "многопоточные" задачи, что это значит?
Ответы
Ответ 1
JavaScript не поддерживает многопоточность. Однако GWT имеет класс для "имитации" потоков, который не является реальным многопоточным, но в большинстве случаев делает то, что вам нужно: com.google.gwt.core.client.Scheduler.ScheduledCommand
. Этот метод основан на классе таймера, который выполняет метод по истечении заданного времени.
Например, при размещении следующего кода в вашем собственном коде метод scheduleDeferred
будет возвращаться напрямую, а ваш код будет продолжен после команды, а метод execute()
выполняется с помощью таймера:
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
public void execute() {
.. code here is executed using the timer technique.
}
});
Вы можете создать повторяющуюся команду RepeatingCommand
, которая может использоваться для запуска команды более одного раза. Запустите его с помощью Scheduler.get().scheduleIncremental()
, который выполнит команду до тех пор, пока метод execute не вернет false
. Вы можете использовать это для разделения задач на подзадачи, чтобы улучшить поведение "потоков". Scheduler
поддерживает некоторые дополнительные методы для запуска запланированной команды по-разному. Подробнее см. JavaDoc.
Отредактировано и обновлено новым классом GWT вместо устаревшего DeferredCommand
.
Ответ 2
Существует работа с веб-рабочими как часть HTML5, которая реализована в нескольких браузерах, но не на всех (особенно в Internet Explorer). Вы можете использовать эти функции там, где они доступны, но что вам нужно сделать, это посмотреть на модель программирования javascript.
Javascript обычно работает асинхронно. Запросы увольняются, и в какой-то момент их ответы принимаются как событие. Одновременно вы можете иметь большое количество ожидающих запросов. Это потребует немного редизайна вашей системы.
Ответ 3
Новый способ - использовать Scheduler
Ответ 4
JavaScript не поддерживает многопоточность, поэтому, независимо от того, что делает GWT, многопоточность должна выполняться исключительно на стороне сервера, поскольку GWT может использовать только функции, которые уже доступны на стороне клиента.