Используя Flex;Как получить серверное время и продолжать увеличивать без звонков каждую секунду - PullRequest
3 голосов
/ 13 марта 2011

Я работаю над приложением, в котором время сервера должно отображаться в приложении Flex.Идея состоит в том, чтобы сделать вызов RemServerTime () для удаленного взаимодействия BlazeDS один раз во время инициализации приложения, а затем использовать локальный класс Timer, чтобы постоянно обновлять отображение (я не хочу бомбардировать сервер с помощью getServerTime () каждую секунду).

Мой вопрос: как только у меня появится объект AS3 Date.Как мне увеличить его на секунды?

//remoteServerDateTime value is already set by a remote blazeds call
[Bindable] 
var serverTime:Date = remoteServerDateTime;

public function updateTime():void 
{ 
    //I am trying to add code here that increments serverTime by 1 sec.
    serverTime = serverTime + 1 // this wont work




    ticker = new Timer(1,1); 
    ticker.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete); 
    ticker.start(); 
} 

public function onTimerComplete(event:TimerEvent):void{ 
      updateTime(); 
} 

//creationComplete = updateTime();
//MXML <mx:Label text={serverTime} "/>

1 Ответ

2 голосов
/ 13 марта 2011

Вам нужно использовать getTime(), а не getSeconds():

serverTime.setTime(serverTime.getTime() + 1000);

Использование таймера один раз в секунду - это хороший подход для получения уведомлений о времени обновлениявремя кэшированного сервера, но ваш код создает новый таймер после каждого вызова и сбрасывает старый таймер.Разница в том, что один экземпляр таймера не задерживается на время, которое занимает его слушатель timerComplete, в то время как ваш код делает это.

Если от начала onTimerComplete до вызова ticker.start() требуется x секунд, onTimerComplete вызывается каждые x + 1 секунду, а не каждую 1 секунду.Следовательно, serverTime может увеличиваться менее чем на 60 секунд в минуту.

Разница может быть незначительной (вам следует проверить ее).Если это не так, используйте один экземпляр таймера с repeatCount 0, который запускается, когда приходит время сервера.

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

// Initialized when the server responds:
// difference = server time minus local time, in milliseconds
var localToServerDifference:Number =
    remoteServerDateTime.getTime() - new Date().getTime();

public function updateTime():void 
{
    // server time = local time plus difference
    serverTime.setTime(new Date().getTime() + localToServerDifference);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...