我目前正在使用Socket.io作为我的一个项目,我有一些问题为何我的更新。
当我收到新数据时,我正在控制台中登录(console.log(数据)),但问题是我没有一个日志,而是7到9个日志,里面有相同的东西。
io.sockets.on( 'connection', function ( socket ) {
fs.watch( 'example.xml', function ( curr, prev ) {
fs.readFile( 'example.xml', function ( err, data ) {
if ( err ) throw err;
parser.parseString( data );
});
});
parser.addListener('end', function( result ) {
result.time = new Date();
socket.volatile.emit( 'notification' , result );
});
});
result.time每次都不同(仅适用于我的测试)
有没有人有同样的“问题”,我该如何解决?
答案 0 :(得分:0)
我可以想象问题是每次套接字连接时,都会将新的“结束”事件附加到parser
对象。
因此,要连接的第一个套接字将附加一个“结束”事件。下一个要连接的套接字将附加另一个套接字,因为它是an array of listeners,它将被添加到堆栈中,因此您将最终得到N个“结束”事件,依此类推......
解析完成后,它将发出“结束”事件。如果您附加了2,3个或更多“结束”事件,它将会发射N次。所以你的逻辑有问题。您不能在连接到已初始化的对象(可能是单个对象)上附加事件,除非您处理重复项。
我建议您在io.sockets.on('connection')事件之外附加“end”事件,并在此处传递对套接字的引用,以便您知道发送通知的人。
parser.parseString( data, **socket** );
我希望它可以帮到你。