【发布时间】:2012-11-14 12:57:21
【问题描述】:
我正在使用 PHP 从呼叫中心获取大约 80 个用户的可用性数据。我希望每 5 秒向 CallCenter 查询每个用户的状态/可用性,并将结果显示在 Dashboard 上。
呼叫中心一次只能通过 URL 查询一个用户,并且用户名在 url 中(因此 url 不是恒定的)。 CallCenter 的答案在 XML 页面中。我一直在使用 fopen() 来读取 url / XML 的内容,因为这始终是随机生成的 XML 名称,因此查询 url 指向一个目录,而不是确切的 xml url。
我使用 foreach 循环来处理所有事情,其中唯一的 url 用于 USER001,读取 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"; }
}
问题:
我有一个 jquery 脚本,它每 5 秒刷新一次仪表板,因此每 5 秒都会向 CallCenter 服务器查询所有用户。
这可行,但查询实际上需要 1 多分钟才能完成循环并将所有结果返回到仪表板页面。至关重要的是,CallCenter 用户可以查看在给定时间有多少用户/代理可用,以便他们知道是否有足够的代理可用以处理 CallCenter 负载。
可能的解决方案:
对于我的情况,最好的解决方案是什么?
我想到的是为每个用户创建一个 PHP 页面。有一个 CRONJOB,每 x 小时运行一次页面(刷新),页面上有一个脚本,每 5 秒循环一次 XML 查询到 CallCenter。在每个循环结束时(每 5 秒),用户状态被发送到并更新收集器页面。每个用户页面将结果发送到收集器页面,然后仪表板页面每 5 秒将数据获取到收集器页面。
这是一个“聪明”的解决方案吗?您会推荐什么以及如何编写代码?
(我是 PHP 初学者)
【问题讨论】:
-
查询呼叫中心需要 1 分钟?
-
@SkuliAxelson 尝试优化您的脚本,似乎 file_get_contents() 快一点 stackoverflow.com/questions/2749441/… 。也许,您可以尝试为每个用户创建一个 php 文件,并每隔 X 秒同时启动它们stackoverflow.com/questions/6577802/…
-
@SkuliAxelson 我会创建一个数据库,在数据库中放置用户的状态。我分别创建 php 文件并使用 cronjob 同时更新用户状态(类似于 status_updater.php)。另一方面,一个 php 文件 (get_status.php) 每 5 秒从数据库中解析一次用户的状态,当然 jQuery 用于获取客户端的状态。
-
@HamZa DzCyberDeV - 感谢 file_get_contents() 信息。我会按照你的建议尝试。有一个 DataCollector.php、AgentInfo.php,然后每 4 个用户获得一个页面,获得 4 个结果并将它们发送到 DataCollector 页面。然后仪表板包含 DataCollector 和 jquery 更新用户的统计信息。
-
@HamZaDzCyberDeV +1 这将充当您的数据“缓存”