Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在开发中运行但在生产中停止的节点应用程序_Node.js_Ntwitter - Fatal编程技术网

Node.js 在开发中运行但在生产中停止的节点应用程序

Node.js 在开发中运行但在生产中停止的节点应用程序,node.js,ntwitter,Node.js,Ntwitter,我很难找到我的代码有什么问题。如果我运行“node whatever.js”,这个应用程序运行得很好,但一旦我在Nodejitsu这样的地方将它推向生产环境,它就无法运行了(我实际上不确定它是否无法运行,但我认为它在激活服务器后只运行一次,然后停止运行所有请求)。 (为了隐私,我删除了我的密钥和令牌信息) 附言:实际的应用程序托管在这里: 模板中的“wait wait”应该使用socket.io/Express转换成一大堆twitter数据,这在开发中很有效 var express = requ

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

附言:实际的应用程序托管在这里: 模板中的“wait wait”应该使用socket.io/Express转换成一大堆twitter数据,这在开发中很有效

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);
});

总结以上评论,以防其他人有类似情况

台词

// Disconnect stream after -- seconds
var myTimeOut = 21000;
setTimeout(stream.destroy, myTimeOut);
断开Twitter提要的连接,这样用户仍然可以获得一个带有活动socket.io连接的页面,但是没有任何东西可以通过收听Twitter来更新他们


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

您会遇到哪些错误?你看到了什么?@jimm101在nodejitsu日志中,我只看到我在“工作”、“工作”和“断开连接”中编码的控制台消息。上面写着“Nodejitsu OK”,这意味着该应用程序运行良好。但是控制台上的消息可以追溯到2周前我第一次激活这个应用程序的时候,而且它不会在每次有人访问URL时触发。。。我是否做错了什么事情,没有在每次收到请求时启动应用程序?你想做什么?twit.stream看起来像是在21秒后自杀?@jimm101哇,你说得太对了。但我只是想让它对于任何传入的请求,twit流运行,然后在21秒后停止。。。我认为在这种设置下,它会在21秒后停止运行整个应用程序。。。你有什么想法吗?(超时的原因是,当我流太多twit stream时,Twitter会禁止我的API密钥,所以我想阻止twit stream失控)我想它只是停止了twit.stream(),但如果没有它,应用程序除了发送template.html之外什么都不会做,只能坐在一个空套接字上听。听起来Twitter禁止你听太多——他们不知道你正在通过socket.io进行流媒体传输。你可以设置一个setInterval来间歇地醒来和检查,并尝试在他们的雷达下飞行。你下载多少东西有限制吗?如果是这样的话,您可以通过message/byte/whatever进行计数,并在足够长的时间后再次销毁/setTimeout(重启)以避免麻烦。