我想在循环中通过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,所以为这个简单的问题道歉。