Node.js setInterval()计时/调度选择

时间:2018-09-11 02:18:46

标签: javascript node.js socket.io

我正在尝试开发一个Node.js服务器,该服务器充当连接的每个人的节拍器(发送重复的计时消息)。我有socket.io个房间正在工作,因此客户可以“订阅”不同的节拍器,但是它们之间的同步会发生很大的变化。我一直在使用多个setInterval()调用来安排定时消息,并且我知道这不是一个非常可靠的时钟源:

客户:

const socket = io('localhost:8000', {});

socket
    .on('connect', function() {
        console.log('connected');
    })  
    .on('message', function(payload) {
        console.log(payload);
    });

// window.max is specific to the Max/MSP web browser object.
// This basically just subscribes to room 'inst0' or 'inst1'.

window.max.bindInlet('subscribe', function(inst) {
    socket.emit('subscribe', inst);
}); 

服务器:

io.sockets
    .on('connection', (socket) => { 
        console.log('max connected!');
        socket
            .on('subscribe', (payload) => {
                console.log('subscription: ' + payload);
                Object.keys(socket.rooms).forEach(key => socket.leave(key));
                socket.join('inst'+payload);
            });
    });

setInterval(() => {
    io.to('inst0').emit('message', 'bang');
}, 500);
setInterval(() => {
    io.to('inst1').emit('message', 'bang');
}, 250);

还有其他用于事件调度的策略吗?在无延迟的世界中,消息将具有精确的采样时间(44.1kHz分辨率),但我很高兴获得甚至30Hz左右的信号。

0 个答案:

没有答案