node-mysql池和socket.io

我目前使用一个单一的MySQL连接为我的应用程序的所有用户。 我想开始使用一个池(它应该更优化,对吗?),但我有一个“结构”的问题: createPool方法只适用于callback,我不明白如何将连接传递给socket.io事件。

我的意思是,在server.js文件中有一个连接构build点

pool.getConnection(function(err, connection) { //I'm supposed to use the connection here } 

然后有一个sockets事件被“捕获”

 io.sockets.on('connection', function(socket){ socket.on('userLogin', function(id_user){ //I need the connection here to run a query with 'id_user'! }); }); 

在第二点,我需要连接,然后我可以运行

 connection.query('SELECT bla bla bla...', function(err, data){ connection.end(); }); 

我认为这是连接到应用程序的每个用户都有不同连接的唯一方法,但是我真的无法理解如何将连接“传递”到socket.io“空间”。

当你需要的时候,询问游泳池的连接:

 var pool = mysql.createPool(...); io.sockets.on('connection', function(socket) { socket.on('userLogin', function(id_user) { pool.getConnection(function(err, connection) { // assuming err was null here... connection.query(..., function(err, data) { // return the connection to the pool as soon as possible connection.end(); // process data ... }); }); }); }); 

由于pooling, pool.getConnection()是一个非常便宜的调用,所以当您按需调用时没有太大的影响。