私はnode.jsにかなり慣れていないので、mysqlデータベースにpingを実行してテーブルから情報を取得し、複数のブラウザーがリアルタイムで表示できるソケットに配置しようとしています。私はもともと、Rubyで生成されたページへのAJAXリクエストを介してmysql情報を取得していましたが、ユーザーが多いとサーバーがチャグし始めました(呼び出しは1秒に1回発生していました)。そのため、このnode.jsソリューションを進めて、各ブラウザーが毎秒同じリクエストを行うことなく、サーバーが1秒に1回リクエストを実行できるようにしています。サーバーにmysqlデータベースを反復してpingを実行させ、ブラウザーが情報を含むソケットにパイプできるようにすることができれば、サーバーの負荷は問題ないと思います。
私のコードは次のとおりです。
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]));」の「broadcast」を削除すると ブラウザにmysqlリクエストの結果が表示されますが、ライブ/リアルタイムではありません。つまり、結果を表示するには、毎回ブラウザを更新する必要があります。この接続を永続的にして、mysqlデータをソケットにパイプするようにするにはどうすればよいですか?どんな助けでも大歓迎です。