1

我无法找到我的代码有什么问题。如果我运行“node whatever.js”,这个应用程序运行良好,但是一旦我在 Nodejitsu 这样的地方将它推到生产环境,它就无法运行(我实际上不确定它是否无法运行,但我认为它只是运行在我激活服务器后立即停止运行,然后停止运行所有请求)。(出于隐私考虑,我删除了我的密钥和令牌信息)

PS:实际的应用程序托管在这里:http ://bucifer-realtime-twitter.jit.su/ 模板中的“等待它”应该使用socket.io/Express变成一大堆推特数据,这在开发中运行良好。

var express = require("express");
var fs = require("fs");
var http = require("http");
var https = require("https");
var port = "1337";
var twitter = require('ntwitter');

var twit = new twitter({
  consumer_key: 'x',
  consumer_secret: 'x',
  access_token_key: 'x',
  access_token_secret: 'x'
});

var app = express();
app.get("/", function(request, response) {
  var content = fs.readFileSync(__dirname + "/template.html");
  response.setHeader("Content-Type", "text/html");
  response.send(content);
});
var server = http.createServer(app);
server.listen(port);

var io = require('socket.io').listen(server);

app.use(express.static(__dirname + '/public'));

twit.stream('statuses/filter', { track: ['naruto'] }, function(stream) {
  stream.on('data', function (tweet) {
    console.log("working...");
    io.sockets.emit("tweet", tweet);
  });
  stream.on('end', function() {
    console.log("Disconnected");
    io.sockets.emit('ending', {message: 'test'});
  });
  stream.on('error', function(error ,code) {
    console.log("My error: " + error + ": " + code);
  });
  // Disconnect stream after -- seconds
  var myTimeOut = 21000;
  setTimeout(stream.destroy, myTimeOut);
});
4

1 回答 1

0

总结一下上面的评论,以防其他人有类似的情况......

线条

// Disconnect stream after -- seconds
var myTimeOut = 21000;
setTimeout(stream.destroy, myTimeOut);

断开 Twitter 提要,因此仍然会为用户提供一个带有活动 socket.io 连接的页面,但没有任何东西可以监听 Twitter 来更新它们。

如果 Twitter 限制了监听的能力,那么上面引用的代码需要采取不同的方法,通过间歇性唤醒检查消息,当字节/消息/任何阈值接近不可接受的水平时间歇性休眠,等等。Twitter 将有对 socket.io 连接没有洞察力,因此您无需为他们的利益而限制该流量。

于 2014-08-13T21:42:53.460 回答