关于死循环的疑问

关于死循环的疑问

第一个首页文件 index.php

<?php
/**
 * Created by boiling
 * User: boiling
 * message:life just killing time
 */
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
if(!$pv=$redis->get('pv:index')){
 $pv=$redis->set('pv:index',1);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>list</title>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<h1>当前访问量:<span><?php echo $pv;?></span></h1>
</body>
<script src=""></script>
<script>
    $.ajax({
        url:"./list.php",
        type:'post',
        dataType:'json'
 });
</script>
</html>

第二个list数据进入文件 list.php

<?php
/**
 * Created by boiling
 * User: boiling
 * message:life just killing time
 */
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$key='listpv:index';
$redis->rPush($key,1);

第三个在后台匀速处理数据的文件 cron.php

<?php
/**
* Created by boiling
* User: boiling
* message:life just killing time
*/
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$key='listpv:index';
while (true)
{
   if(false !== $redis->lPop($key)){
       if(!$redis->get('pv:index')){
           $redis->set('pv:index',0);
       }else{
           $redis->incrBy('pv:index',1);
       }
   }
}

能够实现队列的进和出,但是期间出现了一个现象!下面是图片讲述

只执行首页文件,这是清空的数据库

http://img1.sycdn.imooc.com//climg/5bfe93ad0001127610030662.jpg

这是加载后的页面

http://img1.sycdn.imooc.com//climg/5bfe93d20001e2ff13640721.jpg

这是刷新多次后数据库的数据

http://img1.sycdn.imooc.com//climg/5bfe93f500018d9310110663.jpg

由于没有执行corn.php文件,所以没有lPop操作,pv无法+1;下面是执行cron.php文件

http://img1.sycdn.imooc.com//climg/5bfe94320001896013520717.jpg

再次刷新首页

http://img1.sycdn.imooc.com//climg/5bfe944d0001b74213580724.jpg

有了pv量的变化,关掉corn.php文件,查询数据库list队列已经出完!

http://img1.sycdn.imooc.com//climg/5bfe94c000014a1910010656.jpg

但是在关闭了corn.php后在刷新首页仍旧有pv的增加,这我就不理解了,对于死循环的文件关闭后为什么程序还在进行?但是关闭了浏览器后死循环的程序就不再运行了!

http://img1.sycdn.imooc.com//climg/5bfe9513000199f313470717.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
guly 2018-11-29 13:51:37

你好,corn.php的对于死循环的文件作用是只要有pv两就写入,在运行list.php 时生成新的pv量这就会启动死循环进行写入,当corn.php关闭时,最后增加的一次是关闭之前增加的,此时页面是42,reids数据是43 ,如果corn.php关闭关闭,你在刷新pv量是不变的,如果解决您的问题请采纳,祝学习愉快!

  • 提问者 慕的地0823274 #1
    问题是corn.php的页面关闭后,仍旧有数据pv的写入,也就是说明关闭浏览器页面后,corn.php文件仍在执行。关闭整个浏览器然后重启首页。此时就不会增加pv。我想知道的是,关闭corn.php页面后。其实corn.php扔在执行。关闭浏览器才能终止他!
    2018-11-29 13:56:59
  • guly 回复 提问者 慕的地0823274 #2
    你好,关闭运行cron.php文件的浏览器页面后pv量将不会增加的。祝学习愉快!
    2018-11-29 14:09:03
  • 提问者 慕的地0823274 回复 guly #3
    我的却是增加了,不然我是不会问的。。。
    2018-11-29 16:47:41
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
PHP典型功能与Laravel5框架开发
  • 参与学习           人
  • 解答问题       722    个

掌握开发中必备技能解锁缓存、支付,邮件和短信发送等高端接口运用,直击工作重难点,通过开发简书项目熟练掌握Laravel5的开发技术。完成以上三个阶段的学习,成为满足企业需求的开发工程师。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师