2010-04-07 3 views
46

Насколько я понимаю, вся клиентская сторона приложения GWT преобразуется в Javascript при его создании, поэтому я полагаю, что этот вопрос связан как с Javascript, так и с возможностями, которые предлагает GWT.Threading in GWT (Client)

У меня есть несколько десятков процессов, которые необходимо будет инициировать в моем приложении GWT, каждый процесс будет непрерывно совершать вызовы на сервер. Поддерживает ли GWT резьбу? Поддерживает ли клиентская сторона GWT потоки?

EDIT:

Этот link гласит:

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

восходящего голосования по этому вопросу не является показатель того, является ли это полезным вопросом, а если вопрос * хорошо написано *, включая четкое описание, поставляемые детали , и некоторые признаки того, что автор уже попытался найти ответ самостоятельно. Теперь я ** не говорю, что ваши вопросы не отвечают этим требованиям, просто объясняя, как голоса за вопросы и ответы различны. –

ответ

34

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.

+1

Исправьте меня, если я ошибаюсь, но ... Я могу использовать потоки Java на стороне сервера, правильно?Если это правильно, то я думаю, что ваш ответ очень помог мне, потому что я думаю, что смогу перепроектировать мою систему на DeferredCommand на стороне клиента и Java-потоках на стороне сервера. – Federer

+0

Скорее всего, вы не можете использовать потоки в самом сервере, потому что сервер запрещает создавать потоки. Но каждый вызов сервера из браузера инициирует «поток», и поток, скорее всего, нужен только в том случае, если вы хотите запустить процесс, который не связан с вызовом из браузера, или вы не хотите, чтобы вызов браузер ждет ответа с сервера. Но в целом все зависит от того, что вы пытаетесь сделать с вашим приложением. –

+2

Что вы подразумеваете под * «сервер запрещает создавать потоки» *? Какой сервер? Я не говорю, что это хорошая практика, но если у Tomcat нет политик безопасности, явно предотвращающих создание потоков, вы можете создавать поток на стороне сервера, как в любой Java-программе, нет !? – SyntaxT3rr0r

0

JavaScript не поддерживает многопоточность, поэтому, независимо от того, что делает GWT, многопоточность должна выполняться исключительно на стороне сервера, поскольку GWT может использовать только функции, которые уже доступны на стороне клиента.

3

Работает с веб-рабочими как часть HTML5, которая реализована в нескольких браузерах, но не на всех (особенно в Internet Explorer). Вы можете использовать эти функции там, где это возможно, но что вам нужно сделать, это посмотреть на модель программирования javascript.

Javascript обычно работает асинхронно. Запросы увольняются, и в какой-то момент их ответы принимаются как событие. Одновременно вы можете иметь большое количество ожидающих запросов. Однако для этого потребуется немного редизайн вашей системы.