【问题标题】:Heroku, Socket.IO, Node.jsHeroku、Socket.IO、Node.js
【发布时间】:2013-03-16 21:39:07
【问题描述】:

我正在 heroku 上设置一个 node.js 推特流媒体应用程序。在第二个客户端建立连接之前,它可以完美运行。这是我在向某人展示之前没想到的:(

我正在为 Twitter Stram API 功能使用 tweet-pipe:https://github.com/peeinears/tweet-pipe

为了让 Socket.IO 在 Heroku 上运行,我按照以下说明操作:https://devcenter.heroku.com/articles/using-socket-io-with-node-js-on-heroku

io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
});

在我的 app.js 文件中,我有

io.sockets.on('connection', function (socket) {
  tp.stream('statuses/filter', params, false, function (stream) {
    stream.on('tweet', function (tweet) {
      socket.emit('tweet', tweet );
    });
  });
});

同样,这一切都很好,直到另一个客户访问该页面。然后原始连接丢失,而第二个客户端有连接。有什么想法吗?我对 Socket.IO 有点陌生。

【问题讨论】:

  • 为每个连接器创建一个新的 tweet-pipe,或者单独注册 tp 流并广播消息。 (如io.sockets.emit('tweet', tweet))是一些快速的想法。我对推文管道或您的用例知之甚少,无法提供更多建议。
  • 谢谢@Chad。这帮了大忙。

标签: node.js heroku socket.io twitter-streaming-api


【解决方案1】:

这就是我修复它的方法,感谢 cmets 中的 Chad。它现在似乎工作正常,因为它是活的并且有点健康。

io.sockets.on('connection', function (socket) {

  var tp = new TweetPipe({
    consumer_key: process.env.CONSUMER_KEY,
    consumer_secret: process.env.CONSUMER_SECRET,
    token: process.env.TOKEN,
    token_secret: process.env.TOKEN_SECRET
  });

  tp.stream('statuses/filter', params, false, function (stream) {
    stream.on('tweet', function (tweet) {
      io.sockets.emit('tweet', tweet );
    });
  });

});

【讨论】:

  • 唯一的问题是每次有人连接时都会运行,因此您会根据连接的人数向浏览器发送重复的消息。仅在“连接”事件之外运行此代码一次,或确保它仅在第一次连接时运行一次。
【解决方案2】:

AFAIK 每个推特句柄只能有一个活动流。您不能将tp.stream 用于第二个客户端。

来源:

  1. https://dev.twitter.com/docs/streaming-apis/streams/public
  2. https://dev.twitter.com/discussions/921

【讨论】:

  • 对,但我认为应该没问题,因为每个人都在听同一个流。
猜你喜欢
  • 2012-07-25
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 2014-06-28
  • 2018-01-14
  • 2017-07-01
  • 1970-01-01
相关资源
最近更新 更多