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


Posted in PHP onFebruary 26, 2021

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

入口文件index.html

<!DOCTYPE HTML>
<html>
<head>
 <title>反ajax推送</title>
 <style>
  .send{color:#555;text-align: left;}
  .require{color:blue;text-align: right;}
  .content_box{text-align: center;margin: 20px;
     border: 1px solid #ddd;padding: 20px;}
 </style>
 <script src="http://code.jQuery.com/jquery-1.11.2.min.js"></script>
</head>
<body>
 <div class="content_box" id="content_box_title" style="border: none;">消息框</div>
 <div class="content_box" id="content_box">
 </div>
 <div style="width: 450px;margin: 0 auto;">
  <select id="username" style="font-size: 20px;">
   <option value="1" selected="selected">1</option>
   <option value="2">2</option>
  </select>
  <input type="text" style="font-size: 20px;" value="" id="send_text">
  <button id="btn_send" style="font-size: 20px;">发送</button>
  <button id="btn_link" style="font-size: 20px">连接</button>
 </div>
 <div class="error_tip" id="error_tip" style="color: red;">
 </div>
 <script>
  $(function(){
   //发送消息
   $('#btn_send').click(function(){
    var send_text = $('#send_text').val();
    if(send_text.length <= 0){
     $('#error_tip').html('不能输入空值');
    }else{
     send(send_text);
    }
   });
   //按回车键发送消息
   $('#send_text').on('keyup',function(e){
    if(e.keyCode == 13){
     $('#btn_send').trigger('click');
    }
   });
   //建立通讯链接
   $('#btn_link').click(function(){
    connect();
    var _this = $(this);
    _this.attr('disabled',true);
    _this.html('已连接');
   });
  });
  //建立通讯连接函数
  function connect(){
   $('#content_box_title').html($('#username').val()+'的消息窗口');
   $.ajax({
    data:{'user':$('#username').val()},
    url:'ajaxPush.PHP',
    type:'get',
    timeout:0,
    dataType:'json',
    success:function(data){
     $('#content_box').append('<div class="require">'+data.msg+'</div>');
     connect();
    }
   });
  }
  //发送消息函数
  function send(massege){
   var user =$('#username').val();
   $.getJSON('write.php',{'msg':massege,'user':user},function(data){
    if(data.sf){
     $('#content_box').append('<div class="send">'+massege+'</div>');
     $('#send_text').val('');
    }else{
     $('#error_tip').html('输入保存错误!');
    }
   });
  }
 </script>
</body>
</html>

ajax处理输入 write.php

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

长轮询推送 ajaxPush.php

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

到此这篇关于PHP实现长轮询消息实时推送功能代码实例讲解的文章就介绍到这了,更多相关PHP实现长轮询消息实时推送内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
使用php+xslt在windows平台上
Oct 09 PHP
php 常用类汇总 推荐收藏
May 13 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 PHP
php递归使用示例(php递归函数)
Feb 14 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
PHP把数字转成人民币大写的函数分享
Jun 30 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
Jun 10 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
/etc/php-fpm.d/www.conf 配置注意事项
Feb 04 PHP
PHP基于接口技术实现简单的多态应用完整实例
Apr 26 PHP
PDO::beginTransaction讲解
Jan 27 PHP
php的对象传值与引用传值代码实例讲解
Feb 26 #PHP
php并发加锁问题分析与设计代码实例讲解
Feb 26 #PHP
PHP内存溢出优化代码详解
Feb 26 #PHP
php自动加载代码实例详解
Feb 26 #PHP
PHP的重载使用魔术方法代码实例详解
Feb 26 #PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
Feb 26 #PHP
php中get_object_vars()在数组的实例用法
Feb 22 #PHP
You might like
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
解析yii数据库的增删查改
2013/06/20 PHP
使用dump函数,给php加断点测试
2013/06/25 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
php-fpm中max_children的配置
2019/03/15 PHP
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
nodejs教程之入门
2014/11/21 NodeJs
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
2016/11/03 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
书单|人生苦短,你还不用python!
2017/12/29 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
销售行业个人求职自荐信
2013/09/25 职场文书
汽车工程专业应届生求职信
2013/10/19 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
应用外语系自荐信
2014/06/26 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
企业投资意向书
2015/05/09 职场文书