从闪存中检索时间服务器的时间(as3)

时间:2012-03-27 07:15:24

标签: flash flash-cs5

请原谅所有这些花哨的动作脚本的新手和Flash。 在发表任何评论之前,我现在一直在拖网寻找答案 - 没有运气,所以我想我会在这里的几个boffins上解决这个问题。

所以在这里。我想要完成的是两个简单的模拟世界时钟(我已经使用Jquery完成了)但IE已经证明是让这个工作正常的最大噩梦 - 所以我正在尝试一个不同的途径。

我编写了一个小脚本来检索服务器时间,如下所示:

var ldr:URLLoader = new URLLoader()
ldr.load(new URLRequest("http://chronos.csr.net"))
ldr.addEventListener(Event.COMPLETE, onLoaded)
function onLoaded(evt:Event){
    trace(ldr.data)
}

有人能告诉我如何打印出上述语法的输出以确保它实际上有效吗?看到我从各种搜索中提取了一些代码 - 是否要求将url指向特定文件?

如果以上是全能的Pixel的优雅实际工作,那么如何将其输入下面的代码:

var now:Date;
var ct:Timer = new Timer(1000); 
ct.addEventListener(TimerEvent.TIMER, onTick);
ct.start();
function onTick(event:TimerEvent):void{
    now = new Date();
    var s:uint = now.getSeconds();
    var m:uint = now.getMinutes();
    var h:uint = now.getHours();
    second_hand_mc.rotation = 180 + (s * 6);
    minute_hand_mc.rotation = 180 + (m * 6);
    hour_hand_mc.rotation = 180 + (h * 30) + (m * 0.5);
}

并且请考虑到DST,因为这是一个轻微的陷阱,我甚至用JS(最终会解决这个问题,但时间不在我身边 - 请原谅双关语。)

非常感谢任何和所有帮助!

1 个答案:

答案 0 :(得分:0)

你可能想要使用一个有趣的东西,它是NTP(网络时间协议)。它是一个普通的TCP流,它发送4个字节的数据,这是UTC格式的当前时间。

Flash中的问题是您无法向任意服务器发送纯TCP请求 - Flash要求服务器发送许可的策略响应。因此,您必须代理从NTP服务器获取的响应(或者,如果您想使其更简单,只需将服务器的系统日期打印到输出流),并从Flash调用脚本。

在这里,我找到了一些用PHP http://www.xenocafe.com/tutorials/php/ntp_time_synchronization/index.php编写的NTP同步脚本示例。您不需要同步部分,只需要尝试连接到几个时间服务器并获得响应的部分。

这不会非常精确,因为从Flash客户端连接和发送数据到服务器需要时间,但是,您可以尝试计算数据传输到客户端所需的平均时间。你的行动方针是:

  1. 将当前日期从服务器脚本发送到Flash。
  2. Flash收到日期后,会将其发回。
  3. 重复设置1和两次以收集足够的数据来计算旅行所需的平均时间。让服务器发送响应的时间称为ST0ST1,... STN和服务器接收响应的时间:RT0RT1 ,. .. RTN。然后是大约(RT0 - ST0 + RT1 - ST1 + ... RTN - STN) / (2 * N)行进所需的平均时间。
  4. 然后,您将记录增量并将其添加到每次尝试与服务器同步时发送到Flash的时间。
  5. 同样,所有这些都取决于你想要的精确程度。您只需将日期打印到请求输出流,并忽略旅行时间/从不将服务器与NTP服务器等同步。