http协议+MYSQL实现聊天
反向ajax:指的是服务器主动向客户端推送数据信息
通过长连接+ob缓存+ajax轮询实现
表数据sql
接下来 我们先通过一段代码来理解一下原理:
//反向ajax原理(ob缓存+http长连接) ob_start(); echo str_repeat('', 4096) ob_end_flush(); ob_flush(); $i = 1; while(true){ echo $i++; ob_flush(); flush(); sleep(1);//每秒发送一次数据 }
那么实际上的php页面应该怎么写呢?看下面的写法:
//反向ajax原理(ob缓存+http长连接) $link = mysql_connect('localhost','root','root'); mysql_query("set names utf8",$link); mysql_select_db("数据库名称"); ob_start(); echo str_repeat('', 4096) ob_end_flush(); ob_flush(); //实时查询是否有用户向客服发送消息 while(true){ $sql = "SELECT * FROM chat_log WHERE rec = 'admin' AND is_new = '1' ORDER BY log_id DESC limit 1"; $res = mysql_query($sql,$link); if($row = mysql_fetch_assoc($res)){ $sql = "UPDATE chat_log SET is_new = '0' WHERE log_id = ".$row['log_id']; mysql_query($sql,$link); echo "<script>parent.showMsg(".json_encode($row).")</script>"; ob_flush(); flush(); sleep(1); }
剩下的html页面完全可以自己构思,主要是通过js的方法showMsg来统一实现就可以了,用到的函数有:
append向某个地方插入语句
回车换行用\r\n
eval 处理json数据
-----------------------------------------------------
注意在php页面将收到的内容转一下形式:
htmlspecialchars($_POST['content'],ENT_QUOTES);
通往牛逼的路上,在意的只有远方!