如何在用户断开连接时禁用套接字的事件侦听器?

时间:2014-07-08 00:54:03

标签: node.js twitter socket.io

我正在为Node.js使用Twit库,我首先在这里创建一个传入的推文流:

var stream = T.stream('statuses/filter', { locations: allLocations })

然后,使用Socket.io,我将推文发送到每个连接的客户端,并在用户断开连接时记录:

io.on('connection', function(socket){
  socket.on('disconnect', function() {
    console.log("User disconnected!!!!!"); 
  });
  stream.on('tweet', function(tweet) {
    // sends tweet to client in question:
    socket.emit('info', tweet);
  });
}

问题在于,即使用户断开连接,对他们来说的推文仍然会被事件监听器解析,并记录到控制台。有没有办法去禁止"用户断开连接时所有与socket相关的事件监听器?或者是否有更简洁的方法来处理流媒体推文的这种情况?

1 个答案:

答案 0 :(得分:1)

这是一个解决方案:

io.on('connection', function(socket){
  socket.on('disconnect', function() {
    console.log("User disconnected!!!!!"); 
    stream.removeListener('tweet', onTweet);
  });
  function onTweet(tweet) {
    // sends tweet to client in question:
    socket.emit('info', tweet);
  }
  stream.on('tweet', onTweet);
}

此外,您可以使用单个“tweet”事件处理程序向所有套接字广播,而不是为每个连接添加新的“tweet”事件处理程序。