为什么要在长轮询中使用session_write_close


Why should session_write_close be used in long polling?

我正在读一篇关于Nolithius长期民意调查的文章。在PHP在整个会话中休眠一节中,我们写到应该调用session_write_close函数,以防止整个会话陷入死锁。这里的死锁到底是什么意思?这是否意味着,如果没有这个函数,在客户端打开的同一域的任何其他页面都将无法从其他脚本(如本脚本)接收AJAX数据,直到本脚本完成执行并返回结果?为什么会发生这种情况?session_write_close在这方面有什么帮助?在收到来自此请求的数据后,下次他从该域请求页面时,使用它不会从客户端删除所有个性化设置吗?

这是我的理解:

当使用基于文件的会话时,每个请求都会锁定文件,直到请求结束。

这意味着下一个请求(也使用会话数据)必须等待锁定释放。

这用于避免会话数据损坏。

使用session_write_close()将清理(但不会丢失任何会话数据)并提前释放对文件的锁定,从而允许其他请求继续进行。

这是一个很好的做法,尤其是如果你的脚本可能睡眠时间很长。