2

我有一个包含用户信息的数组和一个网站上的 Web 服务,我可以查询用户的状态(在线/离线)。我想做的是每 x 秒查询一次站点以获取每个用户的状态。

大约有 10 个用户,下面是数组的一个示例。我可以改变数组是需要的。我唯一需要手动输入的是用户名和全名。我可以从服务器调用的“状态”。

$users = array
(  
  "username"=>array("Fullname","Status"),  
  "johndoe"=>array("John Doe","Online"),
  "janedoe"=>array("Jane Doe","Offline")
);

这是我可以用来查询站点的 url 示例(查询仅返回用户状态(在线或离线):
http ://thesite.com:80/webservice/user/ username /

这是我可以用来获取特定用户状态的代码:

$url = 'http://thesite.com:80/webservice/user/johndoe/';
$get = fopen($url, "r");
if ($get) {
    while (!feof($get)) {
        $state = fgets($get, 4096);
    }
    fclose($get);
}

echo "User johndoe is: ".$status;
// Output: User johndoe is: Online

现在我只需要帮助每 x 秒迭代一次用户和站点,并使用用户的最后一个数组字段中的每个用户状态更新数组。

请注意,下面我使用 php 和 fopen,因为这是一个跨域 get 函数,我无法让 ajax/jquery 工作。我没有修改网络服务服务器的选项。

谢谢 :)

4

2 回答 2

2

您需要创建一个每 x 秒运行一次的 cronjob 脚本。该脚本应该是对该 PHP 函数的异步请求。

public function updateUsers(){
$users = $_SESSION['users'];
foreach($users as $username=>$data) {
    $url = 'http://thesite.com:80/webservice/user/'.$username.'/';
    $get = fopen($url, "r");
    if ($get) {
        while (!feof($get)) {
            $status = fgets($get, 4096);
        }
        fclose($get);
    }
    $users[$username][] = $status;
}
 $_SESSION['users'] = $users;
}

发布异步请求的指南。http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html

希望能帮助到你 :)

于 2012-11-10T11:06:10.037 回答
1

如果你的 $users 数组没有改变,你可以这样做:

foreach($users as $username=>$userdata) {
    $url = 'http://thesite.com:80/webservice/user/'.$username.'/';
    $get = fopen($url, "r");
    if ($get) {
        while (!feof($get)) {
            $state = fgets($get, 4096);
        }
        fclose($get);
    }
    $users[$username][1] = $state;
}

如果您可以将 $users 数组更改为像这样关联:

$users = array(  
    "username"=>array("fullname"=>"Fullname","status"=>"Status"),  
    "johndoe"=>array("fullname"=>"John Doe","status"=>"Online"),
    "janedoe"=>array("fullname"=>"Jane Doe","status"=>"Offline")
);

这会让你使用更多的键/值并且更安全一些。

于 2012-11-10T10:07:55.403 回答