При подключении и выполнении каких то действий пользователя на сервер отправляются данные с помощью webscoket. Но после 3-10 минут скрипт выдает ошибку и все отключается.
Текст ошибки
node:events:491
throw er; // Unhandled 'error' event
^
Error: Connection lost: The server closed the connection.
at Protocol.end (C:\Users\netli\node_modules\mysql\lib\protocol\Protocol.js:112:13)
at Socket.<anonymous> (C:\Users\netli\node_modules\mysql\lib\Connection.js:94:28)
at Socket.<anonymous> (C:\Users\netli\node_modules\mysql\lib\Connection.js:526:10)
at Socket.emit (node:events:525:35)
at endReadableNT (node:internal/streams/readable:1359:12)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
Emitted 'error' event on Connection instance at:
at Connection._handleProtocolError (C:\Users\netli\node_modules\mysql\lib\Connection.js:423:8)
at Protocol.emit (node:events:513:28)
at Protocol._delegateError (C:\Users\netli\node_modules\mysql\lib\protocol\Protocol.js:398:10)
at Protocol.end (C:\Users\netli\node_modules\mysql\lib\protocol\Protocol.js:116:8)
at Socket.<anonymous> (C:\Users\netli\node_modules\mysql\lib\Connection.js:94:28)
[... lines matching original stack trace ...]
at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
fatal: true,
code: 'PROTOCOL_CONNECTION_LOST'
}
Как сделать чтобы не было ошибок ? При каждом выполнении sql запроса открывать новое соединение к mysql и закрывать его ?
Подскажите в каком месте открывать и закрывать соединение в данном случае в базе данных.
const { Server } = require('ws');
const querystring = require('querystring');
const url = require('url');
const mysql = require('mysql');
const server = new Server({ port: 3000 });
var clients = {};
server.on('connection', function connection(ws, request, client) {
const connection = mysql.createConnection({host: '127.0.0.1', user: 'root', password: 'root', database: 'base'});
const q = url.parse(request.url);
const output = querystring.decode(q.query);
if(output.id === undefined) {
return false;
}
let id = output.id;
connection.query("UPDATE `user_pay` SET `online` = 1 WHERE `id` = ?", [id]);
clients[id] = id;
server.clients[id] = ws;
ws.on('message', function message(data) {
//
});
//Закрытие сокета
ws.on('close', () => {
connection.query("UPDATE `user_pay` SET `online` = 0 WHERE `id` = ?", [id]);
});
});