nodejs socket.io在函数循环内部发出

时间:2014-08-14 13:56:58

标签: node.js loops socket.io emit

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

0 个答案:

没有答案