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中全面阻止SQL注入式攻击分析小结
Jan 30 PHP
关于crontab的使用详解
Jun 24 PHP
php实现发送微信模板消息的方法
Mar 07 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 PHP
php实现短信发送代码
Jul 05 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
PHP书写格式详解(必看)
May 23 PHP
php封装的表单验证类完整实例
Oct 19 PHP
简单谈谈PHP中的Reload操作
Dec 12 PHP
php中类和对象:静态属性、静态方法
Apr 09 PHP
phpMyAdmin通过密码漏洞留后门文件
Nov 20 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 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中使用array函数新建一个数组
2015/11/19 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
Windows下搭建python开发环境详细步骤
2020/07/20 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
用python实现对比两张图片的不同
2018/02/05 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
Python 音频生成器的实现示例
2019/12/24 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
Python如何将函数值赋给变量
2020/04/28 Python
Python无损压缩图片的示例代码
2020/08/06 Python
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
财务会计专业求职信范文
2013/12/31 职场文书
小学生家长寄语
2014/04/02 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
计算机相关专业自荐信
2014/07/02 职场文书
写得不错的求职信范文
2014/07/11 职场文书
车辆委托书范本
2014/10/05 职场文书
Python使用永中文档转换服务
2022/05/06 Python