• 技术文章 >后端开发 >php教程

    PHP实现聊天室的主动更新与被动更新_PHP

    2016-06-01 12:32:30原创377
    聊天的内容如何显示在屏幕上,一种是每隔一段时间刷新一次页面,读入全部聊天
    内容,然后显示,这里采用的是js的document.write的方法实现不刷新的聊天页面
    !

    1 主页面的生成,规定了CSS类型,显示欢迎词
    function write2(){
    if(this.u.document==null)return;
    this.u.document.writeln("");
    this.u.document.writeln("ml; charset=gb2312>");
    this.u.document.writeln("");

    this.u.document.writeln("
    ");
    this.u.document.writeln("//.................. 这里插入生成在线人数组的程序段


    this.u.document.writeln("
    ";
    }
    //更新发言内容
    while(file_exists($lockfile)){ $pppp++; }

    //发言的锁定
    fclose(fopen($lockfile,"w"));

    //读入发言的总句数,也就是所有人一共发了多少言!我们可以保存每一个发言,但
    是这样会占用大量的磁盘空间,我们采用了一种取模的方法,循环使用文件来减少
    文件操作!
    $talkmessage = file($filename);
    $number = chop($talkmessage[0]);

    //发言数增加一,然后保存
    $talkhandle = fopen($filename,"w");
    $number++;
    fputs($talkhandle,$number);
    fclose($talkhandle);

    /去掉锁定
    unlink($lockfile);

    //对发言总数对10取模,作为文件名保存发言内容,也就是说第11句和第1句使用同
    一个文件名,由于不可能同时有10句话没有更新,所以这是数在人不是非常多的情
    况下很好!当然,考虑到人多的情况,可以设成100.
    $filehandle = fopen("messageonline".($number%10).".php","w");
    fputs($filehandle,$message);
    fclose($filehandle);

    //显示进入信息
    print("parent.u.document.writeln("$message");n");

    //调用主动刷新js程序,传递已经显示的发言数目
    print("parent.flushwin($number)n");

    //保存最后一次显示的发言
    $last = $number;
    }


    3 处理发送表单的请求

    //不处理空的发言和超过一定数目的发言
    if( ($message != "")&&(strlen($message)<150))
    {

    //检查发言者是否在线,防止意外
    $onlineperson = file("useronline.dbf");
    $personsign=0;
    for($i=0;$i{
    $person = split($split,$onlineperson[$i],99);
    if($person[0] == $name)
    {
    $personsign = 1;
    $person[3] = date("U");
    break;
    }
    }

    //在线时的处理程序
    if($personsign == 1)
    {

    //添加发言时间的部分
    $message = $message." ".date("m月d日 H:i")."
    ";


    //锁定发言总数文件
    while(file_exists($lockfile)){ $pppp++; }
    fclose(fopen($lockfile,"w"));

    //读入发言总数
    $talkmessage = file($filename);
    $number = chop($talkmessage[0]);

    //总数加1,然后保存
    $talkhandle = fopen($filename,"w");
    $number++;
    fputs($talkhandle,$number);
    fclose($talkhandle);
    unlink($lockfile);

    //总数对10取模后以文件形式保存发言内容
    $filehandle = fopen("messageonline".($number%10).".php","w");
    fputs($filehandle,$message);
    fclose($filehandle);
    }
    }

    //////////////////////////////////////////////////////////////////
    这样,表单的处理已经完成,下面的主动更新程序将会把新的发言内容显示在屏幕

    //////////////////////////////////////////////////////////////////

    4 主动更新的自动循环调用方法

    可以使用&&pass=?>&&last="+winnumber;
    flush.location=url
    flushflag=false
    }

    //否则等待一个循环
    flushtimerID=setTimeout("flushstart()",2000);
    flushtimerRunning=true;
    }

    这种方法保证了在主程序不死的情况下,后台更新程序会一直运行下去!


    5 主动更新程序



    这样,每个发送的发言,经过被动更新程序处理保存到文件内,然后由一个循环的主
    动更新程序完成显示任务!!!
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Linux 下 PHP 连接 MS SQLServer 的办法_PHP 下一篇:PHP程序员一般都忽略了的几点精华_PHP
    Web大前端开发直播班

    相关文章推荐

    • PHP详细解析之phar• 关于数组重组。该怎么处理 • 此函数是PHP中哪方面的学问,其功能是何 • PHP框架YII札记之1 • CakePHP中运用TinyMce详解

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网