我正在尝试开发一个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左右的信号。