我对 node.js 相当陌生,我正在尝试 ping 我的 mysql 数据库以从表中获取信息并将其放置在多个浏览器可以实时查看的套接字中。我最初是通过对 Ruby 生成的页面的 AJAX 请求获取 mysql 信息,但是当我有很多用户时(调用每秒发生 1 次),我的服务器开始运行。这就是为什么我要继续使用这个 node.js 解决方案,以便服务器可以每秒运行 1 次请求,而无需每个浏览器每秒都发出相同的请求。如果我可以让服务器迭代并 ping mysql 数据库并允许浏览器通过管道将信息传输到套接字 - 我相信我的服务器负载会很好。
我的代码如下:
var http = require('http');
var mysqlClient = require('mysql').createClient({'user':'root','password':'tester123'});
mysqlClient.query('USE conferenceLine');
var mysqlData = [];
setInterval(function(){
mysqlClient.query(
'SELECT number, page_id FROM callers',
function selectCb(err, results, fields) {
if (err) {
throw err;
}
//if there are callers log all the callers
for(var i = 0; i < results.length; i++){
mysqlData[i] = results[i];
console.log(mysqlData[i]);
}
});
}, 1000);
var io = require('socket.io').listen(12003);
io.sockets.on('connection', function(client) {
console.log("New Connection: ", client.id); //log new connection
client.emit('connection', client.id);//emit to let site know its connected
//broadcast latest mysql response as json
for(var i=0; i<mysqlData.length; i++){
client.broadcast.emit('init', JSON.stringify(mysqlData[i]));
console.log("this just happend");
}
client.on('disconnect', function() {
console.log("Disconnected: ", client.id);
});
});
当我删除“client.broadcast.emit('init', JSON.stringify(mysqlData[i]));”中的“广播”时 我在浏览器中看到了 mysql 请求结果,但它不是实时/实时的。即我每次都必须刷新浏览器才能查看结果。我怎样才能使这个连接持久化并让 mysql 数据通过套接字进行管道传输?任何帮助将不胜感激。