【发布时间】:2017-11-27 10:48:22
【问题描述】:
我使用 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);
});
【问题讨论】:
-
我已经编辑了代码检查一下!
-
看起来更好。您实际上应该记录您的错误消息,而不是仅仅断开套接字,并且看起来不会调用
process.on('uncaughtException', ...),因为您在任何地方都没有throw。 -
问题是当有很多连接时我的查询停止执行并且套接字没有向客户端发送消息。