PHP+AJAX 实现实时显示在线用户信息

来源:岁月联盟 编辑:zhuzhu 时间:2009-03-09
我现在的博客就使用了这种方法来显示的在线用户信息的,但是觉得开销太大了!负载能力不太好!如果小型的站点足够用了!

我的博客用的Jquery框架,当然Ajax调用方式就很简单了!如下:
  1. function UpdateOnline(){
  2.    if (arguments[0]==true){
  3.        $.ajax({
  4.            url:'ajax.php?do=updateonline',
  5.            type:'GET',
  6.            success:function(){
  7.                $('#updateonline').html(arguments[0])
  8.            }
  9.        }
  10.        );
  11.    }else{
  12.        $.ajax({url:'ajax.php?do=updateonline',type:'GET'});
  13.    }
  14. }

这个updateonline是div的ID。还有就是调用这个函数!
  1. $(document).ready(function(){
  2.    UpdateOnline(true);
  3.    window.setInterval("UpdateOnline(true)",60000);
  4. });

下面是服务端处理代码:
  1. $Now=time();
  2. $FileName='online.xml';
  3. $XML=new DomDocument;
  4. $XML->load($FileName);
  5. $Items=$XML->getElementsByTagName("item");
  6. $I=0;
  7. $AddXML=true;
  8. foreach ($Items as $Item){
  9.    $IP=$Item->childNodes->item(0)->nodeValue;
  10.    $Time=$Item->childNodes->item(1)->nodeValue;
  11.  
  12.    if($IP==GetIP()){
  13.        $AddXML=false;
  14.    }
  15.    if($IP==@$_SESSION['IP']){
  16.        $XML_Online=$XML->getElementsByTagName("online")->item(0);
  17.        $XML_Online_Item_Select=$XML->getElementsByTagName("item")->item($I);
  18.        $XML_Online_Item=$XML->createElement("item");
  19.        $NewIP=$XML->createElement("ip",$IP);
  20.        $XML_Online_Item->appendChild($NewIP);
  21.        $NewTime=$XML->createElement("time",$Now);
  22.        $XML_Online_Item->appendChild($NewTime);
  23.        $XML_Online->replaceChild($XML_Online_Item,$XML_Online_Item_Select);
  24.        $XML->save($FileName);
  25.    }
  26.    if(round(($Now-$Time)/60)>1){
  27.       $Item=$XML->documentElement->getElementsByTagName("item")->item($I);
  28.       $XML->documentElement->removeChild($Item);
  29.       $XML->save($FileName);
  30.    }
  31.    $I++;
  32. }
  33. if($AddXML){
  34.        $XML->formatOutput = true;
  35.        $XML_Online=$XML->getElementsByTagName("online")->item(0);
  36.        $XML_Online_Item=$XML->createElement("item");
  37.        $XML_Online_Item_IP=$XML->createElement("ip",GetIP());
  38.        $XML_Online_Item->appendChild($XML_Online_Item_IP);
  39.        $XML_Online_Item_Time=$XML->createElement("time",$Now);
  40.        $XML_Online_Item->appendChild($XML_Online_Item_Time);
  41.        $XML_Online->appendChild($XML_Online_Item);
  42.        $XML->save($FileName);
  43.        $_SESSION['IP']=GetIP();
  44. }
  45. if($Items->length==0){
  46.    echo'1';
  47. }else{
  48.    echo $Items->length;
  49. }
  50. unset($Now,$FileName,$XML,$Items,$I,$AddXML);

配合了session来存储IP地址以区分用户。

下面是XML文件
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <online>
  3. <item><ip>127.0.0.1</ip><time>1232254720</time></item>
  4. </online>
好了基本上就这些!