2009-05-31 58 views
3

我有这样的代码写了抢夺一些气象数据,并使其可在我的网站:在网站中实现这种PHP/XML功能的理想方式是什么?

if(! $xml = simplexml_load_file('http://www.weather.gov/data/current_obs/KBED.xml')) 
{ 
    echo 'unable to load XML file'; 
} 
else 
{ 
    $temp = $xml->temp_f.' Degrees'; 
    $wind = $xml->wind_mph; 
    $wind_dir = $xml->wind_dir; 
    $gust = $xml->wind_gust_mph; 
    $time = $xml->observation_time; 
    $pres = $xml->pressure_in; 
    $weath = $xml->weather; 
} 

然后,我只是附和出来我希望他们里面的标签内。我的网站流量很低,但是我想知道如果我在流量上飙升的话,做什么“最好的”方法就是做这样的事情。我应该每隔一小时(在刷新XML时)将这些变量写入数据库,并使用cron作业来保存每次ping服务器的操作,或者这种做法不错吗?我知道这有点主观,但我没有其他人要求“最好的方式”。谢谢!!

回答

1
  • 设置cron作业定期读取XML文档,解析它并将变量存储在数据库中。
  • 当请求一个页面,从数据库读取的变量和渲染你的页面。
  • 这是最后一次更新的时间戳存储在数据库一样,所以当数据是陈旧的(因为天气网站上下左右),你可以告诉一个好主意。

这种设置看起来很合理的我。

+0

我是否正确地假设每次ping其他服务器时会“粗鲁”或以其他方式效率低下? – 2009-05-31 22:10:21

+0

t取决于他们的TOS。但是由于他们提供了一个可解析的XML提要,所以他们很可能会这样做,特别是如果你不经常这样做。每小时一次应该是合理的。同样,首先检查网站的TOS是一个好主意。 – 2009-05-31 22:14:14

+0

但是当然,我现在拥有它,每次页面加载时都会ping它?它似乎很多,但从来没有管理过高负载的服务器,我不知道什么是讨厌的,什么不是... – 2009-05-31 23:57:31

0

您可以缓存的外部站点的输出,并让它更新自己说每5-10秒。这将会消除来自您网站的很多“ping”的影响。这真的取决于时间精度对客户/客户的重要程度。

在一个高流量的情况下我会运行一个后台进程或cron作业并获取天气每一个指定的时间间隔,并在完成后覆盖公共网站页面创建一个单独的脚本。这样,您不必担心缓存,因为它是由后台任务完成的,您的访问者只是从Web服务器访问静态页面。这也避免或至少最小化将数据库并入等式的需要,并且相当轻量。

不利的一面,它创建失败的第二点,如果该信息需要准确的页面访问时间可能是相当无用。

2

我建议如下:

  • 当你第一次得到的XML的内容,解析它,它序列化到一个文件,以某种方式(附加到文件的时间戳也许是因为部分序列化的数据结构)

  • 每次页面加载时,抓取序列化的数据并检查时间戳。如果它通过了某个点,请继续抓取xml并缓存它,确保更新时间戳。如果没有,只需使用该数据。

这应该工作,意味着你只需要去获取XML偶尔,而且,一旦缓存已经过期,你不会有去,并得到它定期即使没有人是废物访问(因为它只是根据请求更新)。

+0

这种方法有一个缺点,当缓存需要更新时,页面加载速度会变慢。 – 2009-05-31 22:23:20

+1

授予,但是再次提供来自XML的响应足够迅速,而不是预防性 - 也意味着您不需要cron作业薄弱环节,也不需要数据库连接。 – Kazar 2009-05-31 22:31:26

相关问题