2013-05-09 36 views
1

我目前正在使用Node.js和SOcket.io處理流應用程序。目前,該應用程序完美工作,但我需要做一件事:由於它是一個流應用程序,有很多數據推送到客戶端,所以我只想顯示服務器推送的10個最近的對象。 我該怎麼做?我應該在客戶端代碼上還是直接在服務器上執行此操作?我真的不知道。限制使用node.js和socket.io傳輸到網頁的數據的數量

下面是客戶端的代碼

<script src="/socket.io/socket.io.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script> 
<script> 

    var socket = io.connect('http://192.168.1.29:5000'); 
    socket.on('stream', function(tweet){ 
    $('#tweetd').append(tweet+'<br>'); 
    }); 
</script> 
<div id="tweetd"></div> 
</div> 

Server代碼:

var express = require('express') 
     , app = express() 
     , http = require('http') 
    , server = http.createServer(app) 
     ,Twit = require('twit') 
     , io = require('socket.io').listen(server); 

    server.listen(8080); 

    // routing 
    app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
    }); 

    var watchList = ['love', 'hate']; 
    var T = new Twit({ 
    consumer_key:   '' 
, consumer_secret:  '' 
    , access_token:   '' 
    , access_token_secret: '' 
}); 
io.sockets.on('connection', function (socket) { 
    console.log('Connected'); 



    T.stream('statuses/filter', { track: watchList },function (stream) { 

    stream.on('tweet', function (tweet) { 

     io.sockets.emit('stream',tweet.text); 
     console.log(tweet.text); 

    }); 
}); 
}); 

希望你能幫幫我!

回答

0

我想我剛剛找到了解決方案。下面的代碼:

<script> 

      var tweetNum = 0; 
      var socket = io.connect('/'); 
      socket.on('stream', function(tweet){ 
      $('<div id="tweet' + tweetNum + '" class="tweet ' + (((tweetNum++)%2) ? 'odd' : 'even') + '">' + 
      '<div class="tw_txt">' + tweet.text + '</div>' +'</div>').prependTo('#tweetd'); 

      if (tweetNum >= 11) { 
      $('#tweet' + (tweetNum - 11)).remove(); 
      } 
     }); 
    </script> 

它可能不是最優雅的方式,但它的工作原理

0

你應該在服務器上這樣做。節省帶寬和時間。

如果您有一個要發回的對象列表,只需在通過socket.io發送之前切分列表。

tweets = tweets.slice(tweets.length-10); 

現在通過socket.io發送您的推文,你只會得到列表中的最後10個。

或者,如果你列出在相反的順序:

tweets = tweets.slice(0,10); 
+0

我想你的代碼,但它似乎並沒有工作。我正在使用twit包來將twitter api集成到我的代碼中。控制檯表示tweet沒有方法切片 – MaximeHeckel 2013-05-09 21:15:38

+0

我試圖將一些推文放入數組中,但它似乎不起作用,因爲我正在使用流功能,所以我不認爲我能夠訪問每條推文。 – MaximeHeckel 2013-05-10 10:10:42

0

你要管你的鳴叫在一個數組和不是發送有限的陣列。

+0

我已經試過了。問題是流被認爲是一個對象。 – MaximeHeckel 2013-05-11 17:12:42

相關問題