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