我目前正在开发一个拥有庞大数据库的 CRM 系统。 如果用户想要搜索客户,可以使用ajax搜索。每当他在搜索字段中更改某些内容时,当调用处于待处理状态时,旧调用就会被取消,并且新调用将发送到服务器。 我的问题是,服务器端的 php 进程继续运行。因此,如果用户开始输入地址,则会启动并取消多个请求,并且服务器需要越来越多的时间来应答。
当ajax调用被取消时,是否可以取消正在运行的php进程? 或者服务器端是否有可能的解决方案,以检测来自同一用户的搜索请求是否正在运行并在开始新请求之前取消它?
预先感谢您的回答。
最佳答案
您的服务器端 php 必须输出一些内容来检测请求是否被取消。但由于您可能正在执行冗长的 sql 查询,因此您无法输出任何内容。
但是您仍然可以将连接 ID 保存到 session 中,并在检测到连接时终止连接:
- 公开 session
- 打开 SQL 连接
- 如果在 session 中设置了 search_connection_id,则终止连接
- 查找您的连接 ID,在 session 中保存为 search_connection_id
- 关闭 session - 重要,否则下一个请求将在第 1 步中被阻止
- 查询数据库
- 如果连接断开,则第 3 步中的另一次搜索会杀死您,请退出
- 打开 session ,删除 search_connection_id
- 发送响应,关闭sql连接
关于php - 当ajax调用被取消时,如何取消PHP进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16810339/