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实现递归循环每一个目录
Aug 08 PHP
PHP操作MongoDB时的整数问题及对策说明
May 02 PHP
php whois查询API制作方法
Jun 23 PHP
深入理解php的MySQL连接类
Jun 07 PHP
php中读写文件与读写数据库的效率比较分享
Oct 19 PHP
php生成N个不重复的随机数实例
Nov 12 PHP
ThinkPHP 表单自动验证运用示例
Oct 13 PHP
Yii基于数组和对象的Model查询技巧实例详解
Dec 28 PHP
PHP 获取指定地区的天气实例代码
Feb 08 PHP
laravel利用中间件做防非法登录和权限控制示例
Oct 21 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
Mar 16 PHP
phpstudy隐藏index.php的方法
Sep 21 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 中文处理函数集合
2008/08/27 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
$.format,jquery.format 使用说明
2011/07/13 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
2013/05/07 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
JavaScript模拟push
2016/03/06 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
前端开发基础javaScript的六大作用
2020/08/06 Javascript
python基础教程之常用运算符
2014/08/29 Python
Python字典简介以及用法详解
2016/11/15 Python
python线程池threadpool使用篇
2018/04/27 Python
python实现排序算法解析
2018/09/08 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
专科毕业生学习生活的自我评价
2013/10/26 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
大学生先进事迹材料
2014/02/16 职场文书
搞笑婚礼主持词
2014/03/13 职场文书
岗位廉政承诺书
2014/03/27 职场文书
白血病募捐倡议书
2014/05/14 职场文书
公司活动总结范文
2014/07/01 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
布达拉宫的导游词
2015/02/02 职场文书
设备技术员岗位职责
2015/04/11 职场文书
工地食品安全责任书
2015/05/09 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
Python一行代码实现自动发邮件功能
2021/05/30 Python
Python中如何处理常见报错
2022/01/18 Python