2017-06-23 22 views
1

私は自分のサイトに参加し、クライアントから送信されたCookieを使用して詳細を初期化するときに、ユーザーにメッセージを送信するためにsocket.ioを使用しています。しばらくしてからリフレッシュしてもクエリが機能しなくなりました。NodeJS + Socket.IO + Mysql

io.on('connection', function(socket) { 
var user = false; 
socket.on('hash', function(hash, gameType) { 
    socket.join(gameType); 
    query('SELECT * FROM `users` WHERE `hash` = ' + pool.escape(hash), function(err, row) { 
     if((err) || (!row.length)) return socket.disconnect(); 
     user = row[0]; 
     users[user.steamid] = { 
      socket: socket.id, 
      balance: parseInt(row[0].balance) 
     } 
     socket.emit('message', { 
      balance: row[0].balance, 
      type: 'hello', 
      user: row[0].steamid 
     }); 
    } 
} 

function query(sql, callback) { 
console.log(callback); 
if (typeof callback === 'undefined') { 
    callback = function() {}; 
} 
    pool.getConnection(function(err, connection) { 
     if(err) return callback(err); 
     logger.info('DB Connection ID: '+connection.threadId); 
     connection.query(sql, function(err, rows) { 
      if(err) return callback(err); 
      connection.release(); 
      return callback(null, rows); 
     }); 
    }); 
} 

log4js.configure({ 
appenders: [ 
    { type: 'console' }, 
    { type: 'file', filename: 'logs/site.log' } 
] 
}); 
var logger = log4js.getLogger(); 

var pool = mysql.createPool({ 
    connectionLimit : 10, 
    database: 'test', 
    host: 'localhost', 
    user: 'root', 
    password: 'pw' 
}); 

process.on('uncaughtException', function (err) { 
    logger.trace('Strange error'); 
    logger.debug(err); 
}); 
+0

はそれをチェックアウトする前に、単に接続を解除! – GhoSTBG

+0

よく見えます。実際にソケットを切断するのではなく、エラーメッセージを実際に記録する必要があります。 'process.on( 'uncaughtException'、...)'のようには表示されません。 –

+0

問題は、多くの接続があるとクエリが実行を停止し、ソケットがクライアントにメッセージを送信していないことです。 – GhoSTBG

答えて

0

私の推測では、接続プールを使い果たしている理由です。

は、ここに私のコードです。

if(err) return callback(err); << after some erros here 
connection.release(); << not released if there is an error 

私は、コードを編集したこのライン

関連する問題