Javascript 使用Node Js控制时间并每秒发送查询?

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的事情

我正在用NodeJS编写一个web软件。我也在使用Mssql数据库。我有一个表,它有一个datetime值和一个bit值。位值始终为0,直到实时等于datetime的值。如果它们相等,则位值为1

好的,问题是“如何每次都检查表中的realtime和datetime值?”

我使用了setInterval func,服务器在3到4次后自动关闭。奇怪的是,在服务器关闭后,我看不到任何错误代码或类似的东西


我需要帮助。如果你对如何解决这个问题有任何想法,请帮助我。我听说了一些关于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!我认为你可以提高你得到答案的机会