2013-05-09 1 views
1

현재 Node.js 및 SOcket.io를 사용하는 스트리밍 앱을 만들고 있습니다. 지금 당장은 앱이 완벽하게 작동하지만 한 가지만 할 필요가 있습니다. 스트리밍 앱이므로 클라이언트에 많은 데이터 푸시가 있기 때문에 서버에 의해 푸시 된 가장 최근의 10 개의 객체 만 표시하려고합니다. 어떻게하면됩니까? 클라이언트 코드에서 또는 서버에서 직접해야합니까? 나는 정말로 모른다.node.jsand 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> 

서버 코드 :

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

작동하지만이 작동하지 않습니다. 내 코드에 트위터 API를 통합하기 위해 twit 패키지를 사용하고 있습니다. 트위터에 메서드 슬라이스가 없다는 콘솔이 있습니다. – MaximeHeckel

+0

배열에 일부 트윗을 넣으려고했지만 스트림 함수로 작업 중이므로 작동하지 않는 것 같습니다. 따라서 각 트윗에 액세스 할 수 있다고 생각하지 않습니다. – MaximeHeckel

0

당신은 배열과 제한된 배열을 보내는 것보다 파이프에 트윗을 가지고있다.

+0

나는 이미 그것을 시도했다. 문제는 스트림이 하나의 객체로 간주된다는 것입니다. – MaximeHeckel

관련 문제