PHP聊天室技术 黄国辉1.前言上网聊天是时下最流行的交友方式。各大网站推出的聊天室都各具特色。聊天室主要分为WebChat、BBSChat两种。BBSChat是基于Telnet的Tcp协议......
2. 不断刷新的聊天室 一个标准的聊天室页面由三个Frame组成,分别是显示在线用户的Online、用户发言及功能配置的Say和显示聊天内容的List。用户在Say Frame中敲入发言内容后按发送,数据经过处理后保存在Mysql数据库,同时被保存的还包括发言人、聊天对象及发言的时间。用户一进入聊天室,List Frame从Mysql数据库中把发言时间大于用户进入时间的发言提出显示出来。而后续显示新的发言内容的关键,在于显示聊天内容的那段程式是无限循环的。 List Frame程式概要: $db=mysql_pconnect(localhost,root); #Mysql数据库连接 mysql_select_db(chat,$db); 显示欢迎进入聊天室 配置$init为数据库中发言时间比 进入时间大的第一个数据的ID号 #是数据提取的标志位 while (1==1) { #无限循环开始 提取从$init到最后的数据; while (每一个数据$text) { $emote=strip_tags($text); #防止用户直接输入Html语言 if (eregi("^/",$emote)) #判断发言是否系统命令(以/开头) 系统特别处理 else 显示发言 } 配置$init为最后数据的ID号 flush(); #清出输出缓冲,使发言马上显示 sleep(2); #使程式暂停2秒,节省系统资源 mysql_free_result($result); #释放数据库结果占用的内存 } 因为程式无限循环,在每次循环中输出的发言是先置入输出缓冲区内。通过flush()马上把缓冲区的内容向用户的List Frame送出,达到了实时的聊天效果。循环最后要释放Mysql结果集占用的内存,否则因为无限循环的缘故,系统资源很快会被耗尽。 用户在Login后将建立一个Online的表用于在线用户的统计,主要是为了防止User表过大,程式中频繁用到的检索会拖慢系统的运作。这其中用的最多的是Online Frame,在采用Client Pull的Refresh Meta,每隔一段时间就会查询Online表,以刷新在线的用户。假如用户不发言超过规定时间,系统会调用自定义函数将用户设为TimeOut,强制将其退出聊天室。
2/2 首页 上一页 1 2 |