ループ内で socket.io を介して発行したいと思います。そのために、うまく機能するトリガーを作成しましたが、各トリガーで socket.emit を呼び出し、最初の発行のみが機能します。
サーバーコードは次のとおりです。
var server = require('http').createServer(handler);
var io = require('socket.io')(server);
var fs = require('fs');
var ee = require('events').EventEmitter;
var trig = new ee();
server.listen(8080);
function handler(req,res){
fs.readFile('./index.html', 'utf-8', function(error, content) {
res.writeHead(200, {"Content-Type": "text/html"});
res.end(content);
console.log('page affichée');
});
}
io.on('connection',function(socket){
socket.on('run',function(v){
run(v);
});
trig.on('node',function(i){
io.sockets.emit('node',i);
console.log(i);
});
});
function run(v){
for(i=0;i<v;i++){
trig.emit('node',i+1);
}
}
クライアントコードは次のとおりです。
<input id='file' type='text'></input>
<input type='button' value='lancer le process' onclick="socket.emit('run',document.getElementById('file').value);"></input>
<script>
var compt_nod = document.getElementById('compteur_nodes');
socket = io.connect('http://127.0.0.1:8080/');
socket.on('node',function(v){
compt_nod.value = v;
console.log(v);
});
</script>
サーバーからログを取得しましたが、クライアント側の最初の回答のみです。私は JS と特に Node.js にかなり慣れていないので、このおそらく単純な質問をお詫びします。