Socket.io console.log多次

时间:2012-07-29 16:12:58

标签: javascript node.js socket.io

我目前正在使用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每次都不同(仅适用于我的测试)

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

1 个答案:

答案 0 :(得分:0)

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

因此,要连接的第一个套接字将附加一个“结束”事件。下一个要连接的套接字将附加另一个套接字,因为它是an array of listeners,它将被添加到堆栈中,因此您将最终得到N个“结束”事件,依此类推......

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

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

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

我希望它可以帮到你。