我对node js不是很有经验,但我正在开发一些类似于uber在Map上实时显示汽车的东西。
所以我有一个sql数据库,里面有很多车和它们的gps位置。客户端将其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人同时运行这个函数,它肯定会阻塞。我所有的研究都告诉我,这是正确的方法,所以唯一的选择是将其作为nync运行,对吗?
是否只是returncars函数异步运行?我不确定是否因为connection/sqldetails变量不在函数或任何东西中,所以它都会尝试一次读取它,所以它可能应该进入函数或其他东西。
1条答案
按热度按时间7y4bm7vi1#
代码太零碎,无法真正帮助您,但一般来说:
如果您使用的是node的内置http服务或类似于express的分层服务,那么当接收到请求时,您的代码应该是异步运行的,您不需要做任何特殊的事情来实现这一点。
如果你用的是
npm
对于mysql访问模块,您用来进行查询的函数将异步运行,您不需要做任何特殊的事情就可以实现这一点。在伪代码示例中,显示了
sqlQuery
功能替身。这可能就是您选择使用mysql访问模块的方式,无论是直接回调还是承诺。