我无法找到我的代码有什么问题。如果我运行“node whatever.js”这个应用运行正常但是一旦我把它推到像Nodejitsu这样的地方生产,它就无法运行(我实际上不确定它是否无法运行,但我认为它只是运行一旦我激活服务器,然后停止运行所有请求后)。 (我删除了我的密钥和令牌信息以保护隐私)
P.S:实际的应用程序托管在这里:http://bucifer-realtime-twitter.jit.su/ 模板中的“等待它”应该使用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);
});
答案 0 :(得分:0)
总结上述评论,以防其他人有类似情况......
行
// Disconnect stream after -- seconds
var myTimeOut = 21000;
setTimeout(stream.destroy, myTimeOut);
断开Twitter订阅源,因此用户仍然可以使用活动的socket.io连接提供服务,但是没有任何内容可以通过Twitter来更新它们。
如果Twitter限制了监听的能力,那么上面引用的代码需要采取不同的方法,通过间歇性地唤醒检查消息,在字节/消息/任何阈值接近不可接受的水平时间歇性地休眠等。 Twitter对socket.io连接没有任何了解,所以你不需要为了这个限制来限制流量。