php fpm请求排队

xqt*_*rry 3 php

我在服务器上使用php 5.2.11 + php-fpm + nginx。如果用户发送了一个耗时的请求“ A”,则在从服务器获取对“ A”的响应之前,他将发送更多其他普通请求。奇怪的是,用户在返回对“ A”的响应之前无法获得任何响应,似乎php-fpm将请求排队。我检查了tcp连接,请求是从不同的套接字发送的,具有相同的PHPSESSION。在服务器端,php-fpm还将正常请求写入慢速日志。

我不知道该如何解决,有什么建议吗?

iBo*_*obo 5

这不是PHP-FPM的错误。因为您说的是他们有相同的会话,那才是罪魁祸首。PHP中的会话具有按会话锁定的功能,因此,当同一会话中有未完成的请求时,一个用户无法加载具有特定会话ID的页面。呼叫时会发生阻塞session_start()。这是为了避免让不同的请求编辑相同的会话变量(这会引起各种问题)。当请求结束并将其结果会话数据写入存储时,下一个可以启动。

如果您希望能够读取会话变量并开始一项耗时的工作,但又不想阻止其他请求的发生,则只需session_write_close()在读取会话数据后再使用,便需要继续。请注意,调用后您将无法修改会话数据(也许您无法读取它,因为它$_SESSION已清空但无法记住)。