实时监控API变化的最佳方法?

时间:2014-07-18 04:10:35

标签: php

我已经学习了大约一个月的PHP,并且通过创建我的第一个真实项目,将我学到的技能付诸实践。我计划在MVC结构中从头开始做任何事情(我知道使用像Laravel这样的框架会是一个更好的选择,但是我想要了解框架在我跳入它们之前有多容易)。

然而,我的项目已经碰壁了,我非常感谢一些建议。什么是观察API变化的最佳方式?例如,假设我想要监控Stackoverflow信息API:http://api.stackexchange.com/2.2/info?site=stackoverflow。如果它从33个新活跃用户变为34个,我希望能够检测到该更改。一旦它发生变化,我希望它立即通知用户(通知我只是指一个Bootstrap警报div,它被推送给用户而不必刷新页面)。

我目前知道这样做的唯一方法是使用cURL和cron工作,但我觉得有更好的方法来实现这一点,我想避免使用crons,因为我觉得如果检查后面的一分钟间隔不够快。此外,多个用户可能会同时执行此操作 - 我已经注意到,在我的小型VPS上,crons可能非常沉重。

通过在PHP中执行此操作,请随时告诉我,我是一个白痴。如果有一种语言/框架更适合这种类型的工作(可能是Node?),我很乐意听到它。我可以暂停这个项目,直到我了解你们推荐的内容并选择一个完全不同的PHP项目。

1 个答案:

答案 0 :(得分:0)

好吧,在PHP中,你几乎坚持使用cURL / cron ......但你可以在客户端使用一些ajax,我会使用jQuery,因为它很容易;)

在您应用的页脚中(我假设您将在所有页面中包含一个页脚..)

<!-- make sure jQuery is included before this!! -->
<script type="text/javascript">
  jQuery(document).ready(function($){
    //we'll create an interval to poll the API..
    setInterval(function(){
      //do a POST to your cURL script...
      $.post('http://website.com/curl.php',{ doCurl:true },function(resp){
         //resp is an object ... { numUsers:SOMENUMBER }
         //say you have a div somewhere on the page to display this number...could be hidden.......
         if(resp.numUsers != parseInt($('#api-users').html())){
           //display your popup..or whatever..
         }
         //load the div with the returned number..
         $('#api-users').html(resp.numUsers);

      },'json');
    },1000); //runs every second...
  });
</script>

curl.php

 <?php
if(isset($_POST['doCurl'])){
  //do the curl request to get the number...
  $ch = curl_init('http://api.stackexchange.com/2.2/info?site=stackoverflow');
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  $curlout = curl_exec($ch);
  curl_close($ch);
  if($curlout){
    $out = json_decode($curlout,true); //decode into array
    $resp['numUsers'] = $out['items'][0]['new_active_users'];
  }else{
    $resp['numUsers'] = 0;
  }
  exit(json_encode($resp));

}
?>

应该这样做!记住1秒是非常频繁的,可能会在5秒内更好,但这应该让你开始,否则是节点,或使用tomcat(java)服务器将更适合服务器到客户端通信...