我现在的博客就使用了这种方法来显示的在线用户信息的,但是觉得开销太大了!负载能力不太好!如果小型的站点足够用了!
我的博客用的Jquery框架,当然Ajax调用方式就很简单了!如下:
function UpdateOnline(){ if (arguments[0]==true){ $.ajax({ url:'ajax.php?do=updateonline', type:'GET', success:function(){ $('#updateonline').html(arguments[0]) } } ); }else{ $.ajax({url:'ajax.php?do=updateonline',type:'GET'}); } }
这个updateonline是div的ID。
还有就是调用这个函数!
$(document).ready(function(){ UpdateOnline(true); window.setInterval("UpdateOnline(true)",60000); });
下面是服务端处理代码:
$Now=time(); $FileName='online.xml'; $XML=new DomDocument; $XML->load($FileName); $Items=$XML->getElementsByTagName("item"); $I=0; $AddXML=true; foreach ($Items as $Item){ $IP=$Item->childNodes->item(0)->nodeValue; $Time=$Item->childNodes->item(1)->nodeValue; if($IP==GetIP()){ $AddXML=false; } if($IP==@$_SESSION['IP']){ $XML_Online=$XML->getElementsByTagName("online")->item(0); $XML_Online_Item_Select=$XML->getElementsByTagName("item")->item($I); $XML_Online_Item=$XML->createElement("item"); $NewIP=$XML->createElement("ip",$IP); $XML_Online_Item->appendChild($NewIP); $NewTime=$XML->createElement("time",$Now); $XML_Online_Item->appendChild($NewTime); $XML_Online->replaceChild($XML_Online_Item,$XML_Online_Item_Select); $XML->save($FileName); } if(round(($Now-$Time)/60)>1){ $Item=$XML->documentElement->getElementsByTagName("item")->item($I); $XML->documentElement->removeChild($Item); $XML->save($FileName); } $I++; } if($AddXML){ $XML->formatOutput = true; $XML_Online=$XML->getElementsByTagName("online")->item(0); $XML_Online_Item=$XML->createElement("item"); $XML_Online_Item_IP=$XML->createElement("ip",GetIP()); $XML_Online_Item->appendChild($XML_Online_Item_IP); $XML_Online_Item_Time=$XML->createElement("time",$Now); $XML_Online_Item->appendChild($XML_Online_Item_Time); $XML_Online->appendChild($XML_Online_Item); $XML->save($FileName); $_SESSION['IP']=GetIP(); } if($Items->length==0){ &nbs
p; echo'1'; }else{ echo $Items->length; } unset($Now,$FileName,$XML,$Items,$I,$AddXML);
配合了session来存储IP地址以区分用户。
下面是XML文件
127.0.0.11232254720 好了基本上就这些!
|