AJAX 请求未同时运行
为了优化性能,在 Web 应用程序中使用两个同时的 AJAX 请求来跟踪进度一项漫长的任务。但是,第二个请求会停止,直到第一个请求完成。
根本原因:会话阻塞
默认情况下,PHP 采用基于文件的方法进行会话存储。当使用 session_start() 启动会话时,它会获取会话文件上的独占写锁。因此,尝试访问会话文件的所有其他请求都将被阻止,直到锁被释放。
解决方案:禁用基于文件的会话
一种解决方案是禁用通过修改 php.ini 配置文件来实现基于文件的会话存储:
session.save_handler = redis session.save_path = tcp://localhost:6379
此更改将会话数据重定向到 Redis 服务器,消除了文件锁定问题。
或者:关闭会话文件写入
或者,您可以通过在写入数据后显式关闭会话文件来释放会话文件写锁:
<?php session_start(); $_SESSION['foo'] = 'bar'; // Write data to the session session_write_close(); // Release the file write lock
此技术允许会话数据稍后读取,但可以防止其他请求被会话写锁阻塞。
以上是以下是一些标题选项,可以使用问题格式: * 为什么我的 AJAX 请求不能在 PHP 中同时运行? (聚焦问题) * 如何使用 AJAX 请求实现真正的并发的详细内容。更多信息请关注PHP中文网其他相关文章!