首页 > 解决方案 > 在 EventEmitter 的侦听器内部调用时,Socket.io 会延迟发出数据

问题描述

我有一个智能卡读卡器。emitter它通过一个名为(从 Nodejs 的本机events模块扩展而来)的事件发射器将读取的数据发送到进程。我正在使用 Socket.io 将接收到的字符串数据发送到前端:

emitter.on('cardReceived', (studentRfid) => {
    socket.emit('attended', studentRfid);
    console.log('Attended!');
});

问题是:读卡时,日志Attended!立即打印在屏幕上。但是数据会延迟(大约 5 秒)到达前端。

最初,我认为问题出在网络/套接字上。

但是,我试图以 10 毫秒的间隔向前端(在“打开”侦听器之外)发送一些数据,令人惊讶的是它没有造成任何延迟。数据传输完全同步:

setInterval(() => { 
    socket.emit('message', 'some message'); 
}, 10 );

所以问题不在于 Socket.io 或网络(如上所示,它非常快)。

什么可能导致这些长时间的延误?

标签: node.jssocketseventswebsocketsocket.io

解决方案


推荐阅读