1

現在、アプリのすべてのユーザーに対して単一の 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'!
    });
});

2番目のポイントでは、接続が必要であり、実行できます

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

これが、アプリに接続しているすべてのユーザーに対して異なる接続を確立する唯一の方法だと思いますが、接続を socket.io の「スペース」に「渡す」方法が本当にわかりません。

4

1 に答える 1

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()、非常に安価な呼び出しなので、オンデマンドで呼び出しても大きな影響はありません。

于 2013-05-01T16:01:34.047 に答える