2

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

4

0 回答 0