1

我目前正在将 Socket.io 用于我的一个项目,我有一些问题,为什么我的更新之一。

当我收到新数据时,我正在控制台中创建日志(console.log(data)),但问题是我没有一个日志,而是 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 每次都不同(仅用于我的测试)

有没有人有同样的“问题”,我该如何解决?

4

1 回答 1

0

我可以想象问题是每次套接字连接时,您都会将新的“结束”事件附加到parser对象。

因此,第一个要连接的套接字将附加一个“结束”事件。下一个要连接的套接字将附加另一个套接字,并且因为它是一个侦听器数组,所以它将被添加到堆栈中,因此您最终会收到 N 个“结束”事件,依此类推...

当解析完成时,它将发出“结束”事件。如果您附加了 2、3 个或更多“结束”事件,它将触发 N 次。所以你的逻辑有问题。除非您处理重复项,否则您不能将连接事件附加到已初始化的对象(可能是单例对象)。

我建议您在 io.sockets.on('connection') 事件之外附加“结束”事件,并在此处传递对套接字的引用,以便您知道向谁发送通知。

parser.parseString( data, **socket** );

我希望它对你有帮助。

于 2012-08-13T11:32:51.717 回答