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 相关文章推荐
基于mysql的论坛(4)
Oct 09 PHP
某大型网络公司应聘时的笔试题目附答案
Mar 27 PHP
谈谈新手如何学习PHP 默默经典版本
Aug 04 PHP
php学习之数据类型之间的转换代码
May 29 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
Yii2框架使用计划任务的方法
May 25 PHP
PHP实现的简单排列组合算法应用示例
Jun 20 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 PHP
PHP使用Redis实现Session共享的实现示例
May 12 PHP
PHP 代码简洁之道(小结)
Oct 16 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
PHP预定义接口――Iterator用法示例
Jun 05 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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
sphinx增量索引的一个问题
2011/06/14 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
php实现socket推送技术的示例
2017/12/20 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
2015/08/11 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
2016/11/08 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
js实现自动图片轮播代码
2017/03/22 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
微信小程序实现工作时间段选择
2019/02/15 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
原生js实现随机点名
2020/07/05 Javascript
Python中使用item()方法遍历字典的例子
2014/08/26 Python
Python判断某个用户对某个文件的权限
2016/10/13 Python
Python如何输出百分比
2020/07/31 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
python用700行代码实现http客户端
2021/01/14 Python
总裁秘书岗位职责
2013/12/04 职场文书
汽车维修专业个人求职信范文
2014/01/01 职场文书
学雷锋演讲稿
2014/03/04 职场文书
双创工作实施方案
2014/03/26 职场文书
2014年寒假社会实践活动心得体会
2014/04/07 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
大学生求职计划书
2014/04/30 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
甲午风云观后感
2015/06/02 职场文书
整脏治乱工作简报
2015/07/21 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server