2013-03-26 110 views
0

我在heroku上設置了一個node.js twitter流應用程序。它完美地工作,直到第二個客戶建立連接。這是我沒想到,直到我拿給別人:(Heroku,Socket.IO,Node.js

我使用的鳴叫管用於Twitter的API STRAM功能: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的東西有點新。

+2

爲每個連接器創建一個新的tweet-pipe,或單獨註冊tp流並廣播消息。 (比如'io.sockets.emit('tweet',tweet)')是一些快速的想法。我對tweet-pipe或用例的瞭解不夠,無法提供更多的建議。 – Chad 2013-03-26 21:59:55

+0

謝謝@Chad。這很有幫助。 – Tyler 2013-03-27 18:26:33

回答

0

以下是我固定它,由於乍得的意見。現在看起來工作正常,因爲它是活的,有些健康。

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

}); 
+1

唯一的問題是,每次有人連接時都會運行,因此您將根據連接的人數將重複消息發送到瀏覽器。只在「連接」事件之外運行一次該代碼,或者確保它僅在第一次連接時運行一次。 – Chad 2013-03-27 20:46:43