gpt4 book ai didi

mysql - nodejs 和非阻塞噩梦

转载 作者:可可西里 更新时间:2023-11-01 07:46:30 26 4
gpt4 key购买 nike

我目前正在使用 node.js 和 MySQL 开发 API。我是这个非阻塞的新手,我有一个问题。我正在使用 Node 和 MySQL 模块。

假设我们有这样一个函数:

function doQuery(sql, callback) {
connect(); //does the Client.connect()
client.query(sql, function(err, results, fields) {
if (err) {
errorLog.trace(err, __filename);
throw err;
} else {
logger.trace('DATABASE ACCESS: {query: ' + sql + '} result: OK', __filename);
}
client.end();

callback(results);
});
}

一切运行正常,回调处理值的返回,但有些事情困扰着我。我的浏览器在响应返回之前发生了什么,我不知道这是不是因为在此期间 Node 实际上被阻止了。

那么,我怎么知道某个操作是否真的阻塞了我的 Node 进程?我以为当你将回调传递给一个函数时,node 会自动处理它并将这个回调的执行放在事件循环的队列中。但我实际上并不确定这一点

这一切对你来说有意义吗?

最佳答案

浏览器等待和node.js阻塞是有区别的。

浏览器必须等待,因为它无法立即取回数据。一旦您发回响应,浏览器将停止等待。仅仅因为浏览器正在等待并不意味着 node.js 正在阻塞。这只是意味着连接仍然是打开的

Node.js 在您等待回调时处于空闲状态。它不会阻塞。

node.js 可以与浏览器客户端建立数千个打开的连接。这并不意味着它会阻塞每个。它只是意味着它处于空闲状态,直到它有一个回调要处理或有一个新的请求要处理。

关于mysql - nodejs 和非阻塞噩梦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5942435/

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