Как сделать долгое подключение к mysql?

В общем суть: есть скрипт, который подключается к 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..., но почему-то если у меня несколько вложенных запросов, то один из них может не сработать, поэтому я ушел от этого способа.

Как правильно реализовать?
  • Вопрос задан
  • 411 просмотров
Пригласить эксперта
Ответы на вопрос 2
@superivankorolev
Отловить ошибку try{ }cath(error){ } и открыть еще одно соединение, никак?)
Ответ написан
@foxhole
Если используешь пул соединений, попробуй лимит поднять до 100. Если он ограничен 10 как в коде, то вложенное 11 соединение не создастся, насколько я понимаю.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы