当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP实现长轮询消息实时推送功能代码实例讲解

发布:smiling 来源: PHP粉丝网  添加日期:2022-04-13 15:50:19 浏览: 评论:0 

这篇文章主要介绍了PHP实现长轮询消息实时推送功能代码实例讲解,文中代码演示的很清楚,有感兴趣的可以研究参考下。

本文实例讲述了PHP实现的消息实时推送功能,分享给大家供大家参考,具体如下:

入口文件index.html

  1. <!DOCTYPE HTML> 
  2. <html> 
  3. <head> 
  4.  <title>反ajax推送</title> 
  5.  <style> 
  6.   .send{color:#555;text-align: left;} 
  7.   .require{color:blue;text-align: right;} 
  8.   .content_box{text-align: center;margin: 20px; 
  9.      border: 1px solid #ddd;padding: 20px;} 
  10.  </style> 
  11.  <script src="http://code.jQuery.com/jquery-1.11.2.min.js"></script> 
  12. </head> 
  13. <body> 
  14.  <div class="content_box" id="content_box_title" style="border: none;">消息框</div> 
  15.  <div class="content_box" id="content_box"
  16.  </div> 
  17.  <div style="width: 450px;margin: 0 auto;"
  18.   <select id="username" style="font-size: 20px;"
  19.    <option value="1" selected="selected">1</option> 
  20.    <option value="2">2</option> 
  21.   </select> 
  22.   <input type="text" style="font-size: 20px;" value="" id="send_text"
  23.   <button id="btn_send" style="font-size: 20px;">发送</button> 
  24.   <button id="btn_link" style="font-size: 20px">连接</button> 
  25.  </div> 
  26.  <div class="error_tip" id="error_tip" style="color: red;"
  27.  </div> 
  28.  <script> 
  29.   $(function(){ 
  30.    //发送消息 
  31.    $('#btn_send').click(function(){ 
  32.     var send_text = $('#send_text').val(); 
  33.     if(send_text.length <= 0){ 
  34.      $('#error_tip').html('不能输入空值'); 
  35.     }else
  36.      send(send_text); 
  37.     } 
  38.    }); 
  39.    //按回车键发送消息 
  40.    $('#send_text').on('keyup',function(e){ 
  41.     if(e.keyCode == 13){ 
  42.      $('#btn_send').trigger('click'); 
  43.     } 
  44.    }); 
  45.    //建立通讯链接 
  46.    $('#btn_link').click(function(){ 
  47.     connect(); 
  48.     var _this = $(this); 
  49.     _this.attr('disabled',true); 
  50.     _this.html('已连接'); 
  51.    }); 
  52.   }); 
  53.   //建立通讯连接函数 
  54.   function connect(){ 
  55.    $('#content_box_title').html($('#username').val()+'的消息窗口'); 
  56.    $.ajax({ 
  57.     data:{'user':$('#username').val()}, 
  58.     url:'ajaxPush.PHP'
  59.     type:'get'
  60.     timeout:0, 
  61.     dataType:'json'
  62.     success:function(data){ 
  63.      $('#content_box').append('<div class="require">'+data.msg+'</div>'); 
  64.      connect(); 
  65.     } 
  66.    }); 
  67.   } 
  68.   //发送消息函数 
  69.   function send(massege){ 
  70.    var user =$('#username').val(); 
  71.    $.getJSON('write.php',{'msg':massege,'user':user},function(data){ 
  72.     if(data.sf){ 
  73.      $('#content_box').append('<div class="send">'+massege+'</div>'); 
  74.      $('#send_text').val(''); 
  75.     }else
  76.      $('#error_tip').html('输入保存错误!'); 
  77.     } 
  78.    }); 
  79.   } 
  80.  </script> 
  81. </body> 
  82. </html> 

ajax处理输入 write.php

  1. <?php 
  2. /** 
  3.  * Created by TXM. 
  4.  * Time: 2017/4/18 13:13 
  5.  * function: 
  6.  */ 
  7. $filename = dirname(__FILE__).'/data.txt'
  8. $isread_file = dirname(__FILE__).'/isread.txt'
  9. $user = dirname(__FILE__).'/user.txt'
  10. //写入消息,消息未读,谁发送的消息 
  11. file_put_contents($filename,$_GET['msg']); 
  12. file_put_contents($isread_file,'0'); 
  13. file_put_contents($user,$_GET['user']); 
  14. echo json_encode(array('sf'=>true)); 

长轮询推送 ajaxPush.php

  1. <?php 
  2. /** 
  3.  * Created by TXM. 
  4.  * Time: 2017/4/18 13:12 
  5.  * function: 
  6.  */ 
  7. $filename = dirname(__FILE__).'/data.txt'
  8. $isread_file = dirname(__FILE__).'/isread.txt'
  9. $userfile = dirname(__FILE__).'/user.txt'
  10. $get_user = $_GET['user'] == '1'?'2':'1'
  11. $msg=''
  12. while(1){ 
  13.  $msg = file_get_contents($filename); 
  14.  $isread = file_get_contents($isread_file); 
  15.  $user = file_get_contents($userfile); 
  16.  //是对方发送的消息,设置消息已读,退出循环。 
  17.  if($isread == '0' && $get_user == $user){ 
  18.   file_put_contents($isread_file,'1'); 
  19.   break
  20.  } 
  21.  sleep(1); 
  22. echo json_encode(array('msg'=>$msg));

Tags: PHP长轮询消息

分享到: