从flash中从时间服务器检索时间(as3)



请原谅一个新手使用这些花哨的动作脚本和flash。在发表任何评论之前,我已经搜索了很长一段时间的答案,但没有运气,所以我想我会向这里的一些研究人员提出这个问题。

就这样。我试图实现的是两个简单的模拟世界时钟(我已经使用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中遇到的一个小陷阱(最终会解决的,但时间不在我这边——原谅双关语)。

如有任何帮助,我们将不胜感激!

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

Flash的问题是不能向任意服务器发送纯TCP请求——Flash要求服务器发送允许的策略响应。因此,您必须代理从NTP服务器获得的响应(或者,如果您想简化它,只需将服务器的系统日期打印到输出流),并从Flash调用脚本。

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

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

  1. 将服务器脚本中的当前日期发送到Flash
  2. 一旦Flash收到日期,它就会将其发回
  3. 重复第1组和第2组几次,以收集足够的数据来计算旅行所需的平均时间。让发送响应的服务器时间称为ST0ST1。。。STN和接收响应的服务器次数:RT0RT1。。。RTN。那么旅行所需的平均时间大致为(RT0 - ST0 + RT1 - ST1 + ... RTN - STN) / (2 * N)
  4. 然后,您将记录增量,并将其添加到每次Flash尝试与服务器同步时发送给Flash的时间中

同样,这一切都取决于你希望它有多精确。你可以简单地将日期打印到请求输出流中,忽略旅行时间/从不将你的服务器与NTP服务器等同步。

最新更新