node-mysql pool和socket.io

时间:2013-05-01 15:56:26

标签: mysql node.js socket.io

我目前正在为我的应用上的所有用户使用单个mysql连接。 我想开始使用一个池(它应该更优化,对吧?)但我有一个“结构”问题: createPool 方法只适用于回调而我无法理解如何通过与socket.io事件的连接。

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

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

然后有一个插槽事件被“捕获”的点

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“space”。

1 个答案:

答案 0 :(得分:1)

在需要时请求池连接:

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
        ...
      });
    });
  });
});

由于汇总,pool.getConnection()是一个相当便宜的电话,因此当您按需拨打它时,影响不大。