Javascript 使用Node Js控制时间并每秒发送查询?
我正在用NodeJS编写一个web软件。我也在使用Mssql数据库。我有一个表,它有一个datetime值和一个bit值。位值始终为0,直到实时等于datetime的值。如果它们相等,则位值为1 好的,问题是“如何每次都检查表中的realtime和datetime值?” 我使用了setInterval func,服务器在3到4次后自动关闭。奇怪的是,在服务器关闭后,我看不到任何错误代码或类似的东西Javascript 使用Node Js控制时间并每秒发送查询?,javascript,sql,node.js,sql-server,ajax,Javascript,Sql,Node.js,Sql Server,Ajax,我正在用NodeJS编写一个web软件。我也在使用Mssql数据库。我有一个表,它有一个datetime值和一个bit值。位值始终为0,直到实时等于datetime的值。如果它们相等,则位值为1 好的,问题是“如何每次都检查表中的realtime和datetime值?” 我使用了setInterval func,服务器在3到4次后自动关闭。奇怪的是,在服务器关闭后,我看不到任何错误代码或类似的东西 我需要帮助。如果你对如何解决这个问题有任何想法,请帮助我。我听说了一些关于socket.io的事情
我需要帮助。如果你对如何解决这个问题有任何想法,请帮助我。我听说了一些关于socket.io的事情,但我现在不知道如何调整它。每秒查询数据库可能太频繁了。有可能一个查询在下一个查询开始之前无法完成 要解决这个问题,您应该在每次运行setInterval处理程序时使用新的数据库连接。这样,如果上一个查询没有完成,新查询仍有可能工作。如果您在程序中使用,并从该池请求新的连接,那么每次获取新的数据库连接是合理的 类似这样的内容:未调试
const sql = require('mssql')
const pool = new sql.ConnectionPool(config)
const poolConnect = pool.connect()
pool.on('error', err => {
// ... error handler
})
function intervalTimer() {
return poolConnect.then((pool) => {
pool
.request()
.execute('SELECT whatever', (err, result) => {
// ... error checks
console.dir(result)
})
}).catch(err => {
// ... error handler
})
}
或者,如果上一个查询没有完成,您甚至可以跳过该查询。此代码使用intervalTimerInProgress
boolean值执行此操作。它在开始查询之前设置它,并在查询完成时清除它
const sql = require('mssql')
const pool = new sql.ConnectionPool(config)
const poolConnect = pool.connect()
pool.on('error', err => {
// ... error handler
})
let intervalTimerInProgress = false
function intervalTimer() {
if (!intervalTimerInProgress) {
intervalTimerInProgress = true
return poolConnect.then((pool) => {
pool
.request()
.execute('SELECT whatever', (err, result) => {
// ... error checks
console.dir(result)
intervalTimerInProgress = false
})
}).catch(err => {
// ... error handler
})
}
}
同样,每秒轮询一次DBMS是您应该重新考虑的设计选择。DBMS是许多web应用程序中最稀缺的资源和瓶颈,轮询它们会给它们带来比您想要的更大的负载。“直到实时等于值”命中准确的日期时间可能会有问题。也许>=欢迎来到SO!我认为你可以提高你得到答案的机会