我想在一个循环中通过 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 的新手,所以对于这个可能很简单的问题表示歉意。