gpt4 book ai didi

mysql - 如何终止使用 $.getJSON 方法发出的 MySQL 查询线程

转载 作者:行者123 更新时间:2023-11-29 09:04:27 27 4
gpt4 key购买 nike

我有一个使用 jQuery $.getJSON 方法发送到 MySQL 服务器的查询。当服务器正在处理此查询时,我想发出一个新查询来取代前一个查询并杀死旧线程。

我尝试使用此 post 中的以下方法,如下图:

var request = $.getJSON(....);
request.abort();

但是,它仅在浏览器级别实现了中止功能。 我需要的是向服务器发送一个kill命令,这样它就不会继续查询已经中止的东西。

最佳答案

做到这一点的唯一方法是发送一个新请求,命令服务器明确地了解另一个请求。但首先,我认为 PHP 根本不可能做到这一点。其次,如果可以的话,这意味着您必须告诉客户端有关 MySQL 线程的信息,以便稍后它可以告诉服务器要杀死哪个线程。然而,如果 PHP 实际上正在等待该查询,则很难让 PHP 返回此信息。不仅MySQL进程挂起,PHP进程也挂起。

MySQLi 来救援。
如果您使用 MySQLi,则可以调用 mysqli_kill,它接受进程 ID。这是连接 MySQL 时得到的线程。调用mysqli_thread_id来获取这个id。

存储线程 ID。
如果您将此 id 存储在 session 中,您也许能够在下一个请求中获取该 id 并将其终止。但恐怕上一个请求可能无法保存 session (因为它仍在运行),因此线程 id 可能尚未存储。

如果确实是这种情况,您可以让第一个请求将线程 ID 存储在 memcache 或另一个表中(内存表即可)。使用 session ID 作为 key 。然后,在您的终止请求中,您可以使用 session ID 查找线程 ID 并终止其他请求。

不适用于第一次请求
仅当第一个请求挂起时,这才会造成问题,因为在这种情况下,您还没有 session 。

(我假设 PHP 也可能是另一个服务器进程。无论如何,它不是直接连接到 MySQL 的 JavaScript)。

关于mysql - 如何终止使用 $.getJSON 方法发出的 MySQL 查询线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7482154/

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