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 相关文章推荐
第三节--定义一个类
Nov 16 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
浅析PHP中strlen和mb_strlen的区别
Aug 31 PHP
Symfony核心类概述
Mar 17 PHP
php mysqli查询语句返回值类型实例分析
Jun 29 PHP
php微信公众平台开发之微信群发信息
Sep 13 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
Dec 28 PHP
YII框架http缓存操作示例
Apr 29 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
Oct 03 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
Oct 11 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
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
也谈php网站在线人数统计
2008/04/09 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
2017/06/16 PHP
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
js 文件引入实现代码
2010/04/23 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
python自动化测试之setUp与tearDown实例
2014/09/28 Python
Python生成不重复随机值的方法
2015/05/11 Python
Python编程产生非均匀随机数的几种方法代码分享
2017/12/13 Python
Django实现学员管理系统
2019/02/26 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
Python中求对数方法总结
2020/03/10 Python
CSS3 边框效果
2019/11/04 HTML / CSS
什么叫做SQL注入,如何防止
2016/10/04 面试题
大学生求职中的自我评价
2013/10/01 职场文书
毕业自我评价范文
2013/11/17 职场文书
销售工作岗位职责
2013/12/24 职场文书
师范教师毕业鉴定
2014/01/13 职场文书
生产文员岗位职责
2014/04/05 职场文书
婚假请假条怎么写
2014/04/10 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
教师师德工作总结2015
2015/07/22 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
幼儿园开学家长寄语(2016春季)
2015/12/03 职场文书
社区服务理念口号
2015/12/25 职场文书