首页 > PHP

PHP聊天室技术(1)

时间:2009-05-07 17:19:30  作者:chinaitlab  我要投稿
Linux初探欢迎您的投稿,投放方法请点击这里查看,我们会定期赠送精美小礼品给优秀的投稿作者。海纳百川 取则行远!LinuxGoo欢迎您的到来。
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,强制将其退出聊天室。

如果您需转载 PHP聊天室技术(1),请注明来自LinuxGoo.com,其版权归原作者所有。请广大网友留言时遵纪守法,使用文明用语。如果您在应用中有什么问题,请在下面留言,我们会尽快解答。
来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目热门