小编fil*_*ina的帖子

来自同一客户端的Apache的并发连接


我有一个PHP应用程序,它接收了很多ajax调用.
我注意到,当两个或多个调用同时发生时,它们不会同时执行,第一个必须停止,所以第二个执行.
我已经构建了一个小测试来尝试解决这个问题.我有一个像这样的HTML:

<html>
<head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
    <a href="test.php">Test</a>
    <button>Click</button>
    <button>Click</button>
    <button>Click</button>
    <button>Click</button>
    <script type="text/javascript">
        $('button').click(function() {
            $.get("test.php");
        });
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

test.php包含:

<?php
sleep(2);
echo 'Test';
?>
Run Code Online (Sandbox Code Playgroud)

因此,执行$('button')后,在开发人员工具(或firebug)控制台上单击(),同时发生请求,但在最后一个请求后2秒返回答案,而不是同时返回所有四个( 2秒后).
好吧,我尝试在其他浏览器中打开,同时,这个文件和它工作,它同时执行.我的意思是,在Chrome上运行这个并在firefox中打开页面的选项卡在2秒内显示'Test',而chrome ajax请求的响应在最后一个请求完成后2秒到来,因此其他浏览器请求对第一个请求没有影响一个电话(这将证明这是一个会话问题,但见下文).
如果我为test.php打开多个选项卡,也会发生同样的情况.

我已经尝试将会话更改为memcache - 在其他问题中,人们说会话可能会锁定.这很有道理,但即使从文件更改为memcache之后问题仍然存在(并且脚本没有会话,并且session_autostart已关闭)

我真的是关于apache的配置问题,因为在一段时间后的第一次,如果我执行脚本,它将同时执行所有4个ajax调用!我正在考虑一些DoS保护或类似的东西.

无论如何,任何帮助将不胜感激!


好的,解决了这个问题.

毕竟这是一个会话锁定问题,问题是memcached也会锁定会话!
不得不在memcached.ini中安装具有锁定标志的php_memcached 2.0.1并使用该版本.解决了这个问题.

虽然当请求是针对相同的url时(在上面的例子中我使用了test.php 4次),它仍然一次执行一个.我很确定这是正确的行为,因为同时多次请求资源没有多大意义.改变我的例子来请求test1.php,test2.php等等,它工作得很好.如果更改了查询字符串也可以.

谢谢你的帮助!

PS:这么早就回答我自己的问题没有声誉,所以这就是答案

php apache ajax concurrency

7
推荐指数
2
解决办法
2689
查看次数

如何在git上恢复远程裸存储库

我已完成此链接中描述的过程http://toroid.org/ams/git-website-howto
它就像一个魅力,但现在我必须暂时将远程存储库(和结帐)还原为以前的状态.
我认为我可能只需要在本地恢复并推送(并且结帐将正常工作)但我不确定.
请注意,它不是一个明确的还原,只是一个临时的(看起来好像我应该在我应该之前将最新的更改推送到生产中)

git

5
推荐指数
1
解决办法
4237
查看次数

标签 统计

ajax ×1

apache ×1

concurrency ×1

git ×1

php ×1