Я суперновинец для Node.js, пришедший из PHP-фона, но в настоящее время я работаю над проектом, который требует какой-то открытой связи между веб-сервером и браузером.
Сценарийпредназначены для передачи двух наборов данных: список запланированного персонала, который был сопоставлен со списком сотрудников, работающих по расписанию, и набор данных, относящихся к состоянию автомобиля.По независящим от меня причинам запланированные данные о персонале и транспортном средстве находятся на сервере MySQL, а синхронизированные данные - на отдельном сервере MsSQL.
Проблема, с которой я сталкиваюсь, заключается в том,он должен делать, через определенное время (иногда минуты, иногда больше суток) он перестает что-либо делать.Таймеры setInterval для функций останавливаются и перестают обслуживать страницу socket.io.js на стороне клиента.
Я думаю, что именно так я управляю своими соединениями SQL, но я не совсем уверен, и даже еслиЯ был, я не совсем уверен, где я иду не так здесь.Ошибки не выводятся на консоль.Я часами пытался найти решение, но не смог найти ничего, что соответствовало бы моим обстоятельствам.
Вот код целиком (изменена информация о соединении SQL для соображений безопасности).
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http, {
forceNew: true
});
var moment = require('moment');
var mssql = require('mssql');
var mssql_connection = new mssql.ConnectionPool({
pool: {
max: 10
},
server: 'hostname',
user: 'user',
password: 'password',
database: 'database'
});
mssql_connection.connect();
var mysql = require('mysql');
var mysql_connection = mysql.createPool({
connectionLimit: 20,
host: 'hostname',
user: 'user',
password: 'password',
database: 'database'
});
app.get('/', function (req, res) {
red.end();
});
http.listen(3000, function () {
console.log('listening on *:3000');
});
// Create function to refresh all data that must be grabbed every 5 seconds.
function refreshSchedule() {
return new Promise(function (resolve, reject) {
try {
mysql_connection.getConnection(function (err, connection) {
// Query MySQL database for timepunch entries matching MsSQL results.
connection.query('SELECT * FROM view_schedule WHERE active = 1 AND start <= ' + moment().format("X") + ' AND finish > ' + moment().format("X") + ' ORDER BY job,start ASC', function (err, mysql_result, fields) {
if (err) {
connection.release();
console.log(err);
return;
}
resolve(mysql_result);
});
});
} catch (e) {
console.log(e);
}
});
}
function refreshTimeclock(schedule) {
return new Promise(function (resolve, reject) {
var timestamp = moment().format("X") - (60 * 60 * 12);
const request = new mssql.Request(mssql_connection);
request.query('SELECT SCHDHISTID,DATETIMESTART,DATETIMEEND,PERSID,PERSCODE,LNAME,FNAME FROM dbo.VWSCHDHIST WHERE DATETIMESTART >= \'' + moment(timestamp, "X").format("YYYY-MM-DD HH:mm:ss.SSS") + '\'', (err, mssql_result) => {
if (err) {
connection.release();
console.log(err);
return;
}
var process_schedule = schedule;
var process_timepunch = mssql_result.recordset;
var output = [];
for (i = 0; i < process_schedule.length; i++) {
process_schedule[i].fullname = process_schedule[i].fullname.replace(" (NTD)", "");
process_schedule[i].fullname = process_schedule[i].fullname.replace(" (ND)", "");
process_schedule[i].fullname = process_schedule[i].fullname.replace(" (NT)", "");
process_schedule[i].fullname = process_schedule[i].fullname.replace(" (Maint)", "");
process_schedule[i].fullname = process_schedule[i].fullname.replace(" ^^", "");
process_schedule[i].fullname = process_schedule[i].fullname.replace(" (Jr./NTD)", "");
for (j = 0; j < process_timepunch.length; j++) {
if (process_schedule[i].fullname == (process_timepunch[j].FNAME + " " + process_timepunch[j].LNAME)) {
process_schedule[i].punchin = moment(process_timepunch[j].DATETIMESTART, "YYYY-MM-DD HH:mm:ss.SSS").format("X");
if (process_timepunch[j].DATETIMEEND) {
process_schedule[i].punchout = moment(process_timepunch[j].DATETIMEEND, "YYYY-MM-DD HH:mm:ss.SSS").format("X");
} else {
process_schedule[i].punchout = null;
}
}
}
output.push(process_schedule[i]);
}
resolve(output);
});
});
}
function refreshVehicles() {
return new Promise(function (resolve, reject) {
try {
mysql_connection.getConnection(function (err, connection) {
// Query MySQL database for timepunch entries matching MsSQL results.
connection.query('SELECT * FROM data_vehicles WHERE number > 0', function (err, mysql_result, fields) {
if (err) {
connection.release();
console.log(err);
return;
}
resolve(mysql_result);
});
});
} catch (e) {
console.log(e);
}
});
}
setInterval(function () {
refreshSchedule().then(function (result) {
refreshTimeclock(result).then(function (output) {
console.log("Schedule: " + moment().format("HH:mm:ss"));
io.emit('updateSchedule', output);
});
});
}, 15000);
setInterval(function () {
refreshVehicles().then(function (output) {
console.log("Vehicles: " + moment().format("HH:mm:ss"));
io.emit('updateVehicles', output);
});
}, 15000);
io.on('connection', function (socket) {
console.log('a user connected');
});
Любая помощь приветствуется, даже точка в правильном направлении может помочь в этой точке.