Apache flex 使用Flex;如何获得服务器时间并保持增量,而无需每秒调用

Apache flex 使用Flex;如何获得服务器时间并保持增量,而无需每秒调用,apache-flex,actionscript-3,date,time,Apache Flex,Actionscript 3,Date,Time,我正在开发一个应用程序,需要在Flex应用程序上显示服务器时间。 其想法是在应用程序初始化期间进行一次BlazeDS远程处理调用getServerTime() 然后使用一个本地计时器类来不断更新显示(我不想每秒都用getServerTime()轰击服务器) 我的问题是,一旦我有了AS3日期对象。如何以秒为单位递增 //remoteServerDateTime value is already set by a remote blazeds call [Bindable] var serverT

我正在开发一个应用程序,需要在Flex应用程序上显示服务器时间。 其想法是在应用程序初始化期间进行一次BlazeDS远程处理调用getServerTime() 然后使用一个本地计时器类来不断更新显示(我不想每秒都用getServerTime()轰击服务器)

我的问题是,一旦我有了AS3日期对象。如何以秒为单位递增

//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} "/>
//远程blazeds调用已设置remoteServerDateTime值
[可装订]
var serverTime:Date=remoteServerDateTime;
公共函数updateTime():void
{ 
//我试图在这里添加代码,使服务器时间增加1秒。
serverTime=serverTime+1//这行不通
ticker=新定时器(1,1);
ticker.addEventListener(TimerEvent.TIMER\u COMPLETE,OnTimer COMPLETE);
ticker.start();
} 
公共函数onTimerComplete(事件:TimerEvent):void{
updateTime();
} 
//creationComplete=updateTime();

//MXML您需要使用
getTime()
,而不是
getSeconds()

每秒触发一次计时器是一种很好的方法,可以在更新缓存的服务器时间时得到通知,但是您的代码会在每次调用后创建一个新计时器,并丢弃旧计时器。不同之处在于,单个计时器实例不会被其timerComplete侦听器延迟,而代码会延迟

如果从
onTimerComplete
开始到调用
ticker.start()
需要x秒,则每隔x+1秒调用
onTimerComplete
,而不是每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);
}

这是一个有效的解决方案吗?还是有更好的方法?serverTime.setSeconds(serverTime.getSeconds()+1);您需要使用getTime(),而不是getSeconds()。
// 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);
}