2

PHPを使用して、コールセンターから約80人のユーザーの可用性データを取得しています。5秒ごとに各ユーザーのステータス/可用性についてコールセンターに問い合わせ、ダッシュボードに結果を表示したいと思います。

CallCenterは、一度に1人のユーザーのURLを介してのみ照会でき、ユーザー名はURLに含まれています(したがって、URLは一定ではありません)。コールセンターからの回答はXMLページにあります。これは常にランダムに生成されたXML名であり、クエリurlは正確なxml urlではなくディレクトリを指しているため、私はfopen()を使用してurl/XMLのコンテンツを読み取りました。

私はすべてをforeachループで動作させています。ここでは、USER001に一意のURLが使用され、XMLページのコンテンツが読み取られ、変数が更新されます。デモコード:

ユーザー配列:

$users = array( 
        "username" => array("fullname" => "Full Name",
                            "status" => ""  
                            ),
        "username" => array("fullname" => "Full Name",
                            "status" => "")
                );

Foreachループ:

foreach($users as $username => $userstatus) {
$url = 'http://'.$username.':PasswordForUser@serveraddress.com:80/callcenter/'.$username.'/services/callcenter/';
$get = fopen($url, "r");
    if ($get) {
        while (!feof($get)) {
            $status = fgets($get, 4096);
        }
        fclose($get);
    }
if(strpos($status, 'Available')) { $users[$username]["status"] = "Available"; } else { $users[$username]["status"] = "Offline"; }

}

問題:
ダッシュボードを5秒ごとに更新するjqueryスクリプトがあるため、5秒ごとにCallCenterサーバーにすべてのユーザーが照会されます。

これは機能しますが、クエリがループを終了してすべての結果をダッシュ​​ボードページに返すまでに実際には1分以上かかります。コールセンターのユーザーは、特定の時間に利用可能なユーザー/エージェントの数を確認して、コールセンターの負荷を処理するのに十分なエージェントが利用可能かどうかを知ることが重要です。

考えられる解決策:
私の場合の最善の解決策は何でしょうか?

私が考えたのは、ユーザーごとにPHPページを作成することです。x時間ごとにページを実行する(更新するための)CRONJOBと、5秒ごとにXMLクエリを介してCallCenterにループするページ上のスクリプトを用意します。各ループの終わり(5秒ごと)に、ユーザーステータスがコレクターページに送信され、更新されます。すべてのユーザーページが結果をコレクターページに送信し、ダッシュボードページが5秒ごとにデータをコレクターページにフェッチングします。

これは「スマート」なソリューションですか?何をお勧めし、どのようにコーディングしますか?
(私はPHPの初心者です)

4

4 に答える 4

1

初めての使用

echo microtime(true)

GETクエリの前後で、コールセンターから取得する応答の速度を決定します。これにより、(A)クエリの数から得られるのか、(B)単一の速度から得られるのかがわかります。クエリ。

コールセンターにデータプロセスを変更させることができない場合は、以下に概説するように、このルートを使用する必要があります。

ajax/jQuery呼び出しのスレッド化。

ページが更新されたとき-スレッドIDをスクリプトに渡す4〜6個のajax呼び出しを実行し、ユーザーデータコレクションを流出させます。つまり、スレッドあたり80/4 = 20ユーザー(ほとんどのブラウザーは少数のhttpリクエストしか処理できないため、処理しないでください)。基本的にスタックして終了するまで待機するため、あまりにも多くのスレッドを作成します-これはあなたが望むものではありません)-データが返されたら、単純なjqueryでIDに書き込むことができます。

<div id="threadresults1"></div>
<div id="threadresults2"></div>
<div id="threadresults3"></div>
...

これが明確であることを願っています。

于 2012-11-14T13:41:09.427 に答える
0

上記のコメントで@AlexandruMihaiに完全に同意する必要があります。

phpでforeachループを実行する代わりに、それをjQueryレベルにドロップし、phpスクリプトを1対1のプロキシとしてのみ使用します。リソースが多くなりますが、JSはコールバックに依存し、phpは一度に1つの名前しか処理する必要がないため、同時に無制限の数のスレッド/読み取りを実行できます。

そのため、プロキシスクリプトが遅れている場合でも、jsレベルで他の演算子に対して有効な応答を取得できるため、プロセス全体がスムーズで応答性が高くなります。

于 2012-11-14T13:32:40.217 に答える
0

コメントで、ユーザーのリストは静的に定義されており、何らかの方法で照会されないことが確立されているため、ページにユーザーのリストを認識させることができます。

次に、ユーザーごとに非同期でphpページをクエリできます:queryPage.php?username = john

そのページでは、その特定のユーザーのコールセンターにのみクエリを実行します。したがって、60人のユーザーすべてに対して1つだけではなく、60の非同期要求があると、ケースに役立つはずです。

于 2012-11-14T13:35:58.133 に答える
0

返信してくれたすべてのユーザーに感謝したいだけです。このアプローチでは私の質問に対する良い解決策はないと思うので、最初の投稿で提案したように、私は最後に行きました。cronjobを使用して1分ごとに実行され、データを収集する複数のページを作成しました。その後、他のページはx秒ごとにデータをフェッチします。

于 2012-11-27T16:15:51.290 に答える