mysql - NodeJS + Socket.IO + Mysql

标签 mysql node.js socket.io

我使用 socket.io 是为了在用户加入我的网站时向用户发送消息,并使用客户端发送的 cookie 初始化他的详细信息。一段时间后,很少刷新执行我的查询停止工作。

这是我的代码:

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

最佳答案

我的猜测是您耗尽了连接池。

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

在这一行之前释放连接

关于mysql - NodeJS + Socket.IO + Mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44728489/

相关文章:

javascript - Node Express 中的并行异步路由器

node.js - 为什么这个 coffeescript 代码总是返回 true?

java - 如何将文件路径保存到sql数据库

php - MySQL查询以特定顺序返回结果而不按顺序返回

MySQL 具有分层数据的连续行的时间差

mysql - 处理 MySQL 日期以提高成千上万用户性能的最佳方法

javascript - 如何根据Js数组中保存的Id获取分散在数组字段中的Object

javascript - 连接后忽略服务器端的 socket.emit?

ios - 是否可以将 Socket.io 与 AWS Lambda 一起使用?

node.js - socket.io 重新连接后再创建一个连接