管理パネルとして機能する 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コードはオンラインライターをチェックするように設計されているため、オフラインライターを知る方法が思いつかないという事実を除いて、すべて正常に機能していますが、これは、ライターが一度オンラインになった場合、オンラインのままになることを意味します( PHP コードが終了し、空のライターが返されるまで。
私の要点を説明できることを願っています。この質問は、コードの一部ではなく、アイデアに関するものです。どんな入力でも大歓迎です。
ありがとう。