GWT: Timer - единственный способ поддерживать мое приложение в актуальном состоянии на сервере? - PullRequest
3 голосов
/ 09 февраля 2012

Меня только что попросили уменьшить трафик моего приложения GWT.Существует один метод, который проверяет состояние.

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

Ответы [ 3 ]

3 голосов
/ 09 февраля 2012

Вы можете проверить gwteventservice . Он утверждает, что есть способ отправить события сервера и уведомить клиента.

У меня такое ощущение, что они могут быть реализованы как долго выполняющиеся (зависающие) вызовы RPC между клиентом и сервером, которые истекают через некоторый интервал (скажем, 20 секунд), а затем повторно выполняются. Сервер возвращает обратный вызов, если в это время происходит событие.

Я не использовал это лично, но знаю людей, использующих это, чтобы передать события клиенту. Посмотрите на документы . Если мое предположение верно, идея состоит в том, чтобы отправить вызов RPC на сервер, который не возвращается (зависает). Если событие происходит на сервере, сервер отвечает, и этот вызов RPC возвращается с событием. Если событие отсутствует, время ожидания вызова истекает через 20 секунд . Затем на сервер делается новый вызов, который зависает таким же образом, пока не произойдет событие.

Что достигается, так это то, что он уменьшает количество вызовов на сервер до одного для каждого события (если оно есть) или одного вызова каждые 20 секунд (если его нет). Похоже, что 20-секундный интервал может быть настроен.

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

Вот еще один ресурс на ServerPush - который, скорее всего, реализован gwteventservice.

2 голосов
/ 09 февраля 2012

Используя движок приложений Google, вы можете использовать технологию Channel

http://code.google.com/intl/en-US/appengine/docs/java/channel/overview.html

1 голос
/ 09 февраля 2012

Если вам нужен клиент для получения статуса с сервера, то вам достаточно сделать звонок на сервер, чтобы получить его статус.

  • Вы можете посмотреть на уменьшение размера некоторых ваших сообщений
  • Вы можете свернуть таймер, чтобы статусный вызов выходил реже
  • Вы могли бы «оптимизировать», чтобы таймер сбрасывался, когда происходит какой-либо другой ввод-вывод клиент / сервер (т. Е. Если сервер отвечает, что вы в порядке, вам не нужно отправлять следующий запрос состояния). *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...