我对 Node js 没有那么丰富的经验,但我正在开发类似于 uber 如何在 map 上实时显示他们的汽车的东西。
所以我有一个包含大量汽车及其 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查询不是即时的,如果有1000人同时运行这个函数,肯定会堵塞。我所有的研究都告诉我,这是正确的方法,所以唯一的选择就是以同步方式运行,对吗?
另外,returnCars 函数是否可以异步运行?我不确定是否因为连接/sql 详细信息变量不在函数或任何内容中,所以它会尝试立即读取它,所以也许它应该进入函数或其他内容。
最佳答案
代码太零散,无法真正帮助您,但总的来说:
如果您使用 Node 的内置 HTTP 服务或在其之上分层的服务(例如 Express),则接收请求时的代码预计会异步运行,并且您无需执行任何特殊操作即可发生这种情况。
如果您使用任何主要
npm
模块进行 MySQL 访问,则用于进行查询的函数将异步运行,并且无需执行任何特殊操作即可实现此目的.
在您的伪代码示例中,您显示了 sqlQuery
函数替代的回调。这很可能就是您选择使用的 MySQL 访问模块的使用方式,无论是像这样的直接回调还是 Promise。
关于javascript - 该函数是否应该在服务器上异步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49983110/