В общем суть: есть скрипт, который подключается к mysql. Там же запускается сокет-сервер. Клиент подключается и получает какую-то информацию из БД на протяжении всего сеанса (т.е. клиенту нужна информация - в скрипте делается запрос в бд). Сеанс может длиться как 1 минуту, так и целый день.
Сейчас реализовано так:
var mysql = require('mysql');
var http = require('http');
var net = require('net');
var connection = mysql.createConnection({
connectionLimit : 10,
host : 'localhost',
user : 'root',
password : '',
database : 'dbase'
});
connection.connect();
var app = http.createServer(function(req, res) { }).listen(5555);
net.createServer(function (socket) {
socket.on('data', function (data) {
var json = JSON.parse(data);
connection.query('SELECT * FROM os_devices WHERE device_hash = ?', [json.device], function(err, rows) {
if(rows) {
connection.query('UPDATE os_devices SET counter = counter + 1 WHERE device_hash = ?', [json.device], function(err, rows) {
socket.write("ok\r\n");
});
}
else {
socket.write("err\r\n");
}
});
});
});
Вся проблема в том, что рано или поздно скрипт вылетает с ошибкой:
Error: Connection lost: The server closed the connection.
at Protocol.end (/var/www/server/node_modules/mysql/lib/protocol/Protocol.js:109:13)
at Socket. (/var/www/server/node_modules/mysql/lib/Connection.js:102:28)
at Socket.emit (events.js:117:20)
at _stream_readable.js:944:16
at process._tickCallback (node.js:448:13)
Я пробовал через
https://github.com/felixge/node-mysql#pooling-conn..., но почему-то если у меня несколько вложенных запросов, то один из них может не сработать, поэтому я ушел от этого способа.
Как правильно реализовать?