我有一个用作管理面板的 Web 应用程序。它有一个实时聊天选项,可以与另一端的作家(员工)联系。Web 应用程序使用以下 PHP 代码检查在线作者。
$q = 0;
$lasttime = isset($_POST['timestamp']) ? $_POST['timestamp'] : 0;
while ($q<5){
sleep(3);
$wresult = $db->query("SELECT writer_alias FROM tblwriter WHERE writer_isactive=1 AND (UNIX_TIMESTAMP(NOW())-last_activity)<10");
if ($wresult->num_rows){ break; }
++$q;
}
if ($wresult->num_rows){
while ($row = $wresult->fetch_object()){ $writers[] = $row; }
$wresult->free();
}
echo json_encode(
array(
"writers" => $writers,
"now" => time()
)
);
在应用程序上,以下 javascript 代码处理 PHP 响应并再次调用 ajax 以完成循环。
function UpdateCHAT(){
$.ajax({
type: "POST",
url: "liveserver.php",
data: {update:"1",timestamp:lastime},
success:
function(data1){
if (data1 == null){
$(".onlinechat i").removeClass("icon-white");
}else{
lastime = user_signin = Number(data1.now);
if (!data1.writers.length){
$(".onlinechat i").removeClass("icon-white");
}else{
$(".onlinechat i").removeClass("icon-white");
$.each(data1.writers,function(j) {
$("#writer_"+data1.writers[j].writer_alias).find("i").addClass("icon-white");
});
}
}
},
dataType: "json",
timeout: 60000,
complete:
function(){
UpdateCHAT();
}
}
);
}
一切都很好,除了我想不出一种方法来了解离线作家,因为 PHP 代码旨在检查在线作家,但这意味着如果作家曾经在线,他将保持在线(在application) 直到 PHP 代码终止并返回空的 writer。
希望我能解释我的观点。这个问题更多地与想法有关,而不是与代码有关。任何输入表示赞赏。
谢谢。