gpt4 book ai didi

sql-server - 在查询完成之前发送响应

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:42 26 4
gpt4 key购买 nike

我有一个 Web 应用程序,可以通过 Node.js 调用对 SQL Server 的查询。

我想从客户端发起一个查询,该查询通常需要 1 - 2 秒,但在某些特殊情况下可能需要长达一分半钟。

客户端想要响应 XHR 请求,并且不想等待一分半钟。它并不关心响应内容。

该查询是通过 openquery 的删除语句 - 它不期望返回结果。

是否有任何方法可以触发诸如删除语句之类的操作,然后在查询完成之前返回对查询的响应,而不管结果如何?我没听说过这样的事情,所以我不知道去哪里找,但目前找不到。

最佳答案

在许多其他语言中,答案将涉及线程,但由于 js 不支持线程,因此您必须使用进程来创建异步返回,就像您所描述的那样。

在您的应用程序中,您会 spawn a child process来自被调用的 REST/Web API 函数,该函数负责将结果返回给客户端。此方案将解耦您对删除查询执行时间的依赖。无论子进程在 2 秒还是 2 分钟内运行,您的客户都不会知道其中的差异,正如他/她所希望的那样,而且结果看起来几乎是立即的。

有许多简单的示例和其他资源,例如 this onethis one等可用。

从 Nodejs 运行子进程的简单代码示例:

var exec = require('child_process').exec;
exec('node -v', function(error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});

您可能不关心甚至不需要输入/输出/错误流,因此您的代码可能看起来更简单。像这样的事情:

var exec = require('child_process').exec;
exec('node -v', function() {
// put your delete code here
});

此部分根据以下评论添加和修改:

据我所知,在 SQL Server 中启动异步任务的唯一方法是安排查询、存储过程等的执行。但这是一个丑陋的黑客行为。有一些 native API 允许您从客户端以编程方式执行此操作,但您又回到了开始的地方。

无论如何,我建议不要在 SQL 中实现此功能,因为您会在 UI/UX 和后端之间创建紧密耦合。我认为没有必要深入研究 Node.js 来实现子进程解决方案。这非常简单,特别是如果您不关心结果的话。简单的即发即忘。

关于sql-server - 在查询完成之前发送响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24348246/

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