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 秒ごとにユーザーとサイトを繰り返し処理し、ユーザーの最後の配列フィールドにある各ユーザーの状態で配列を更新することだけです。

これはクロスドメインの get 関数であり、ajax/jquery を機能させることができなかったため、以下では php と fopen を使用していることに注意してください。Web サービス サーバーを変更するオプションがありません。

ありがとう :)

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 に答える