GWT: многопоточность

#java #multithreading #html #gwt

#java #многопоточность #HTML #gwt

Вопрос:

Я сталкиваюсь с этой проблемой: после нажатия на кнопку я отправляю запрос на сервер и получаю некоторые данные; затем я отображаю данные на новой странице / представлении. Это вызывает проблему: пользовательский интерфейс должен ждать, пока выполняется запрос и данные принимаются, анализируются и устанавливаются в представлении. Это приводит к тому, что пользователю приходится ждать, пока не будут загружены все данные, прежде чем он сможет вернуться назад, и у него даже нет возможности отменить вызов. Многопоточность решила бы проблему, и именно здесь мне нужна помощь.

Веб-работники HTML5 сделали бы это за меня, однако я не хочу «жестко кодировать» их в JSNI и записывать все вызовы с помощью Javascript вместо GWT Java (RequestBuilder). Я читал об DeferredCommand, но я также не думаю, что это ответ на мою проблему.

Есть предложения? Или на данный момент это невозможная оптимизация?

Ответ №1:

В JS, следовательно, GWT, нет многопоточности. Вместо этого вы должны использовать асинхронные вызовы с обратными вызовами. Обычно, когда вы используете GWT RPC для связи, вы отправляете запрос и обрабатываете результат в onSuccess событии. В качестве альтернативы вы всегда можете использовать Timer для периодической проверки результата. Я не уверен, какой запрос вы делаете, поэтому трудно быть конкретным. Вероятно, вам следует проверить соответствующий раздел связи с сервером

РЕДАКТИРОВАТЬ: я только что заметил, что вы упомянули RequestBuilder. sendRequest() не должен блокировать выполнение, и вы должны обработать результат в RequestCallback.onResponseReceived() предоставленном обратном вызове. Что означает, что вы каким-то образом продолжаете обработку события кнопки в этом обратном вызове.