Добрый вечер,

Я нахожусь в процессе написания Java-сервлета (Struts 2, Tomcat, JSP и т. Д.), Который способен выполнять довольно сложные симуляции. Это может занять до 2 минут, и вы получите график результатов. Рассчитать процент выполненного моделирования тривиально, потому что процесс работает, повторяя одни и те же вычисления 1000 раз.

Мне было бы интересно узнать, пытался ли кто-нибудь когда-либо использовать технологию на стороне клиента, чтобы дать какую-либо оценку завершенного процента. Т.е. запросите обработку сервлета, чтобы получить количество циклов, выполненных в различные моменты в течение всего моделирования. Это может быть отображено в виде бара в браузере клиента.

Любые мысли, советы, ресурсы будут высоко ценится.

Благодарность,

Alex

3
Alex Barnes 15 Июн 2010 в 00:16

4 ответа

Лучший ответ

В вашей базе данных есть таблица для ведения списка симуляций вместе с вычисляемым сервером ходом.

В вашем веб-приложении используйте AJAX для запросов к серверу каждые несколько секунд (1-20 в зависимости от нагрузки - это то, с чем я бы поехал) и обновите графический индикатор выполнения. Большинство библиотек javascript имеют простые AJAX-функции, основанные на таймере, чтобы делать именно такие вещи.

Есть несколько деталей, которые необходимо выяснить, например, остаются ли завершенные симуляции в БД (может быть полезной информацией для регистрации), но в целом это должно быть довольно просто.

4
Ben S 14 Июн 2010 в 20:21

AJAX - это путь сюда.

0
duffymo 14 Июн 2010 в 20:21

Вы можете заключить свой ответ в сообщение MIME / Multipart и отправлять свои обновления, пока вы не получите полный ответ.

Bugzilla использует это в своем поиске, чтобы показать экран «Поиск ...», пока результат поиска не будет выполнен.

4
ZeissS 14 Июн 2010 в 20:28

Если вы хотите использовать простой Struts2, вам следует взглянуть на ExecuteAndWait Interceptor .

Он работает по старому методу refresh-with-timeout . Конечно, у него более низкий коэффициент крутости, чем у некоторых AJAX, но он прост и работает (я использовал его).

Struts2 заботится (используя этот перехватчик) о выполнении метода действия (который обычно занимает много времени) в отдельном потоке и возвращает специальный результат wait, пока работа не будет завершена. Вам просто нужно кодировать jsp, который показывает какое-то сообщение «ожидание ...» для этого результата, и заставить его обновляться до одного и того же действия, несколько раз, скажем, с двумя или тремя секундами тайм-аута. Конечно, jsp имеет доступ к свойствам действия, поэтому вы можете написать какой-нибудь метод getProgress() для отображения сообщения о ходе выполнения или панели.

2
leonbloy 15 Июн 2010 в 20:25