2013-04-26 3 views
0

В приложении с модулем socket.io и node-mysql, что лучший способ (наиболее оптимизированный и хорошо разработанный) использовать соединения mysql при срабатывании события?Socket.io & Mysql: сколько соединений?

  1. создать одно соединение и передать его в функцию обратного вызова
  2. создать соединение каждый раз, когда обратного вызова называется

Давайте писать код, чтобы лучше объяснить

Случай 1

var connection = mysql.createConnection({ 
    host  : 'example.org', 
    user  : 'bob', 
    password : 'secret', 
}); 

io.sockets.on('connection', function cb1(){ 
    socket.on('event', function cb2(){ 
     connection.connect(function cb3(){ 
      connection.query(); 
     }); 
    }); 
}); 

Дело 2

io.sockets.on('connection', function cb1(){ 
    socket.on('event', function cb2(){ 
     var connection = mysql.createConnection({ 
      host  : 'example.org', 
      user  : 'bob', 
      password : 'secret', 
     }); 
     connection.connect(function cb3(){ 
      connection.query(); 
     }); 
    }); 
}); 

Мой сервер прослушивает несколько событий сокета, и я испытываю много ошибок таймаута! Я думаю, это может быть связано с использованием соединений.

Любые предложения?

ответ

0

Я думаю, что лучше всего было бы, чтобы все время открывалось соединение и выполнялось только запрос внутри события socket.io. Например:

var connection = mysql.createConnection({ 
host  : 'example.org', 
user  : 'bob', 
password : 'secret', 
}); 
connection.connect(function cb3(){ 
    io.sockets.on('connection', function cb1(){ 
    socket.on('event', function cb2(){ 
      connection.query(); 
     }); 
    }); 
}); 
0

Я бы посмотрел пул соединений, который is implemented by node-mysql. Это имеет то преимущество, что вы можете использовать несколько соединений с вашей базой данных, сохраняя при этом общее количество подключений, чтобы предотвратить наводнение сервера базы данных.

Другая возможность может быть node-mysql-queues, которая может использоваться для предотвращения возможных проблем с несколькими запросами, выполняемыми через одно соединение.

+0

Сначала я начал с пула соединений, но в некоторых ситуациях его очень сложно использовать. Вы вынуждены использовать обратный вызов для использования соединения, и это дает мне много проблем, особенно потому, что у моего сервера есть пара setInterval, всегда работающая в фоновом режиме. Соединение было открыто и закрыто каждый тик! Кроме того, у меня всегда была «прочитанная ошибка ETIMEDOUT», которую я не смог исправить, и многие люди жалуются на это! – dorexx45

Смежные вопросы