gpt4 book ai didi

apache-flex - 使用 Flex;如何获取服务器时间并不断增加而无需每秒调用

转载 作者:行者123 更新时间:2023-12-03 06:34:27 24 4
gpt4 key购买 nike

我正在开发一个应用程序,需要在 Flex 应用程序上显示服务器时间。这个想法是在应用程序初始化期间进行一次 BlazeDS 远程调用 getServerTime()然后使用本地 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} "/>

最佳答案

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

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

让计时器每秒触发一次是在需要更新缓存的服务器时间时收到通知的好方法,但您的代码在每次调用后都会创建一个新计时器并丢弃旧计时器。不同之处在于,单个计时器实例不会延迟到其timerComplete 监听器执行的时间,而您的代码却会延迟。

如果从onTimerComplete开始到调用ticker.start()需要x秒,则每x+调用onTimerComplete 1 秒,而不是每 1 秒。因此,serverTime 每分钟的增量可能会少于 60 秒。

差异可能可以忽略不计(您应该测试它)。如果不是,请使用重复计数为 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);
}

关于apache-flex - 使用 Flex;如何获取服务器时间并不断增加而无需每秒调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5289661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com