请选择 进入手机版 | 继续访问电脑版

SpeedPHP框架

 找回密码
 注册成为新用户

QQ登录

只需一步,快速开始

查看: 963|回复: 2

并发访问执行列队

[复制链接]
发表于 2018-9-11 18:53:53 | 显示全部楼层 |阅读模式
在开发中,需要做一个进度条功能,前台提交数据,后台返回进度数据。涉及同时(并发)访问两个action(这里说的并发不知道正不正确),一个action负责业务执行,其实就是一个for循环,每次执行,写入执行次数到制定文件。 另外一个action负责读取,我同时执行两个action结果发现,必须先执行完负责业务的action才能执行第二个负责读取的action.

我不知道是PHP的特性,还是其他问题,所以过来提问,如果发现问题太小白,请指点。谢谢

我做了一个测试如下:

文件:  CeshiController.php
代码:

  1. class CeshiController extends BaseController{

  2.     function actionA(){
  3.         sleep(10);
  4.         echo "A";
  5.     }

  6.     function actionB(){
  7.         sleep(10);
  8.         echo "B";
  9.     }

  10. }
复制代码


然后我用浏览器访问A以及B。我发现先访问的页面执行完成之后,才执行第二个页面。
也就是说我快速访问两个页面,顺序是A,B 这样的话。A 页面执行完成之后,B 页面才执行。 A页面用了10秒,B 页面用了20秒的时间。也就是说同时访问两个页面,但是两个页面并没有同时执行。而是排队执行了。

我以为是apache配置的问题。我就单独在根目录下独立建立了两个文件,则没有发生这个问题。a.php 、b.php 两个文件的时候,快速访问a 以及b 中间相差1~2秒的时间。所以感觉没有出现这种问题。

返回到我要实现的功能上,我利用框架内的action继续处理我的正常业务。单独在根目录下建立的一个php文件负责读取,业务写入的进度。这时候进度条功能实现了。

请问这个情况是怎么回事儿。全部在框架内完成有无好的建议。谢谢啦


发表于 2018-9-11 21:43:17 | 显示全部楼层
“在根目录下独立建立了两个文件,则没有发生这个问题。”

在这两个文件的顶部,都加入session_start(); 就会一样了。
或者是另外开个其他的浏览器,那么同时跑了两个页面。

session_start(); 在config.php里面。
这是因为本地session存储是串行的,所以导致同一个session的页面会排队执行。



 楼主| 发表于 2018-9-12 08:52:29 | 显示全部楼层
感谢Jake,确实是Session引起的问题。关闭则无上述问题。

谢谢。
您需要登录后才可以回帖 登录 | 注册成为新用户

本版积分规则

手机浏览|简版|中文PHP框架|开源协议|SpeedPHP.com ( 粤ICP备08008671号

GMT+8, 2020-5-31 11:18

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表