php – 来自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> test.php包含: <?php sleep(2); echo 'Test'; ?> 因此,执行$(‘button’)后,在开发人员工具(或firebug)控制台上单击(),同时发生请求,但在最后一个请求后2秒返回答案,而不是同时返回所有四个( 2秒后). 好的,解决了这个问题. 毕竟这是一个会话锁定问题,问题是memcached也会锁定会话! 虽然请求是针对相同的url(在上面的示例中我使用了test.php 4次),但它仍然一次执行一个.我很确定这是正确的行为,因为同时多次请求资源没有多大意义.将我的示例更改为请求test1.php,test2.php等等,它运行得很好.如果更改了查询字符串也可以使用. 谢谢你的帮助! PS:这么早就回答我自己的问题没有声誉,所以这就是答案
在我的情况下功能:
session_write_close(); 解决了我的问题 我有下一个程序,一个主页,它经常调用一个名为ajax.php的ajax文件.每隔“n”秒调用一次. 并且,我的表单有一个按钮,它返回一个通过ajax调用的报告(** reporte.php **)它只能通过用户的请求(单击)调用,生成结果可能需要一分钟. 大多数情况下,ajax.php运行需要20ms,但是,如果report.php正在运行,则ajax.php将冻结,直到reporte.php完成任务.最糟糕的是,ajax.php可以叠加. reporte.php(之前) <?php // Some PHP Code goes here. // The rest of the PHP code (mostly,the slow part of the process). ?> reporte.php(修复后) <?php // Some PHP Code goes here. (ideal if it is the fast part). session_write_close(); // fix for concurrent ajax // The rest of the PHP code (mostly,the slow part of the process). ?> 在解决方案之前(Firefox的firebug插件的屏幕截图): 解决方案之后 在解决方案之前检查一下,reporte.php和ajax.php是否仍在加载(并且ajax已经堆叠在几个调用中).在解决方案之后,如果已经加载了每个连续的ajax调用,则reporte.php正在加载. 请注意,在session_write_close()函数之后,不可能(或建议)使用任何会话函数和值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |