我不是经验丰富的节点js,但我开发的东西类似于超级如何在地图上实时显示他们的汽车。
所以我有一个拥有大量汽车和gps位置的SQL数据库。客户端将其gps坐标和半径发送到以下函数。有些是伪代码现在。
var mysql = require('mysql');
var express = require('express');
var connection = mysql.createConnection({
host: "",
port: ,
user: "",
password: "",
database: ""
});
user.on('returnCars', function(gps, radius){
connection.query({
sql: "SELECT * FROM cars WHERE radius = ?",
values: [username] },
function(error, results, fields)
{
if(results)
{
user.emit('returnCars', results);
}
}
});
});
});
因此,当sql查询arnt instant时,如果有1000个人同时运行此函数,它肯定会堵塞。我所有的研究都告诉我,这是正确的方法,所以唯一的选择就是让它运行asnync吧?
它也只是returnCars函数异步运行吗?我不确定是因为连接/ sql详细信息变量不是函数或任何东西,它会一次尝试并读取它所以也许它应该进入函数内部。
答案 0 :(得分:2)
代码太过零碎而无法真正帮助您,但一般:
如果您正在使用Node的内置HTTP服务或其上面的分层内容,例如Express,那么您收到请求的代码应该是异步运行的,并且您无需做任何特殊的事情来制作发生了。
如果您正在使用任何主要npm
模块进行MySQL访问,那么用于进行查询的函数将以异步方式运行,并且您无需做任何特殊操作即可实现。
在您的伪代码示例中,您显示了sqlQuery
函数替换的回调。这可能是你如何使用你选择使用的MySQL访问模块,或者直接回调那样或者承诺。