gpt4 book ai didi

php - 两个并发连接/请求锁

转载 作者:行者123 更新时间:2023-11-28 23:20:56 25 4
gpt4 key购买 nike

我有一个用 javascript 编写的单页网站。

为了简化一切,向服务器发送了三种类型的 http 请求

/action/status/
/action/csv_process/
/action/status_pid/

/action/status/ 请求每 30 秒发送到服务器。请求中没有发生太多事情。下面可以看到请求中执行的所有write mysql查询

2017-01-12 18:37:03 2 --- REQUEST START: action status
2017-01-12 18:37:03 2 UPDATE `log_login` SET time_active=1387 WHERE id=78360
2017-01-12 18:37:03 2 BEGIN
2017-01-12 18:37:03 2 COMMIT
2017-01-12 18:37:03 2 --- REQUEST END 0.076473951339722

然后用户可以上传 CSV 文件。上传文件时,用户可以选择文件的处理方式。以下 /action/csv_process/ 请求通常需要一些时间才能完成,因此每 3 秒向服务器发送一个 /action/status_pid/ 请求以获取进度百分比(0-100)

一切正常。 /action/status_pid/ 请求以 3 秒的间隔运行,并在 /action/csv_process/ 正在处理时返回响应,但一旦 /action/status/ 被发送到服务器一切都锁定,直到 /action/csv_process/ 完成

为什么 /action/status/ 锁定所有内容?

每个请求都使用 mysql 事务运行,所有表都是 InnoDB

即使我没有使用 session_write_close() 所有并发请求也应该等到当前请求完成。但是 /action/status/在数据处理请求完成之前处于挂起状态,并将所有其他请求锁定为挂起

最佳答案

如果您使用 session ,它可能会锁定一个请求,直到您释放 session 。不再需要 session 后尝试调用 session_write_close

关于php - 两个并发连接/请求锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41619839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com