PHP使用反向Ajax技术实现在线客服系统

2022-10-11 20:58:35 129 0
魁首哥

反向 ajax 技术,又称为服务器推技术,server push等。一般用于“在线客服”、“消息推送”、“即时通信”等功能中,比如新浪微博的私信功能,就是客户端不断的请求服务器并创建连接,去查看服务器有没有返回的信息,建立连接比较浪费服务器资源,下面我将根据客户端创建连接的不同性来介绍一下实现反向Ajax的三种思路。

三种思路:

1、间隔固定时间创建连接

这种方式就是按照固定时间不断的去请求服务器,当创建第一个连接时,不管是否有数据返回,此次连接都会失效,然后隔一段时间发出第二个请求,不断重复此动作,此法最浪费资源。

2、长连接方式

这种方式始终只创建一个连接,而这个连接不断开,被称为长时连接,以此不断获取服务器推送的数据,这种方式只创建一个连接,比第一种方法较好。

3、长连接+长轮询方式

这种方式始终创建连接,而这个连接也是长时连接,但是如果获得服务器推送的数据,此连接断开,然后隔固定时间创建第二此连接,这种方式最好,新浪微博的私信功能用的就是这种方法。

在线客服系统

实现思路:

(1)咨询用户端发出问题,把问题存入数据库,把咨询内容显示到客服人员的聊天窗口中(2)客服人员看到聊天窗口后,选择咨询用户,进行回复,然后把回复内容显示到客服人员窗口中

实现方法:

此系统我采用上述思想中的第二种和第三种方式共同实现,咨询用户端采用第三种方式实现,客服人员端采用第二种方式实现。

数据库信息:

mid:主键,pos表示发送人,rec表示接收人,isread表示是否已读,content表示咨询/回复内容。

项目结构图:

客服人员界面(16-kefu-amdin.php):

此处采用长连接。页面中主要有一个div,用于显示聊天信息,还有一个隐藏的 iframe 标签,这个iframe实现反向Ajax模型,用于发送长时连接,当服务器有数据时,服务器将调用comet()方法,此方法显示咨询内容,choose()方法是选择咨询人,resp()是回复方法,在这里会向16-kefu-sendmsg.php页面发出ajax请求,向数据库插入一条回复信息,回复成功后并显示到聊天窗口中。

 



  < meta   charset ="utf-8">
  
  客服功能——客服人员端
  




  

客服功能——客服人员端

  

原理:iframe+长连接

     
     

咨询人:

  

  

发送咨询/回复消息(16-kefu-sendmsg.php)

主要是接受信息,把数据写入到数据库中

 sql  = "insert into msg (pos,rec,content) values ('$pos','$rec','$respContent')";
echo mysql_query($sql) ? 'ok':'fail';
?>  

客户人请求咨询信息(16-kefu-iframe.php)

主要功能是保持连接永不断开,然后不断的从数据库读取一条未读的咨询消息,如果有消息,先设置该消息为已读,返回js脚本,影响iframe的父窗体

 ";
ob_flush();
flush();
while(true){
  //从数据库读取一条未读的咨询消息
  require('./conn.php');
  $sql = "select * from msg where rec = 'admin' and isread = 0 limit 0,1";
  $result = mysql_query($sql);
  $msg = mysql_fetch_assoc($result);
  //如果有消息
  if(!empty($msg)){
    //设置该消息为已读
    $sql = 'update msg set isread = 1 where mid = '.$msg['mid'];
    mysql_query($sql);
    $json = json_encode($msg);//把数组转换为json数据
    //返回js脚本,影响iframe的父窗体
    echo '';
    ob_flush();//强制让php返回给apache
    flush();//强制让web服务器返回给浏览器
  }
  sleep(1);//隔1s循环查1次
}
?>  

咨询人员界面(16-kefu-user.php):

此处采用长连接+长轮询的方式。当页面加载就发出一条ajax请求,如果该请求有数据返回,则显示到聊天窗口中,延时1s后重新发送请求,如果点击咨询,就发出ajax请求将咨询内容写入数据库中。

 



  
  
  客服功能——客服人员端
  





  

客服功能——用户端

  

原理:ajax+长连接+长轮询

     
  

  

咨询人请求回复信息界面(16-kefu-ajax.php):

通过ajax+长轮询实现反向Ajax。请求数据,获取数据后,将数据置为已读,然后返回,结束本次连接。

   

数据库连接文件(conn.php):

   

领取方式:点赞关注小编后私信【资料】获取资料领取方式!

系统的学习PHP

1 ThinkPHP5底层源码分析视频教程

2 PHP7入门到进阶_难得的好教程

3 2020-Laravel6实战视频教程

4 Restful Api实战演练

5 WebSocket网络实战2020最新版

视频教程不是给你收藏的,希望对提升你的学习技能有些许帮助吧!

领取方式:点赞关注小编后私信【资料】获取资料领取方式!

收藏
分享
海报
0 条评论
129
上一篇:黄芪和北芪有什么区别(北芪和黄芪图片区别) 下一篇:樱花拍照姿势大全最新(2022看樱花不露脸怎么拍照)

相关文章

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码