1

私は現在、Node.js と SOcket.io を使用してストリーミング アプリに取り組んでいます。現時点では、アプリは完全に動作しますが、1 つのことを行う必要があります。これはストリーミング アプリであるため、クライアントにプッシュされるデータが多すぎるため、サーバーによってプッシュされた最新の 10 個のオブジェクトのみを表示したいと考えています。どうやってやるの ?クライアントコードでそれを行うべきですか、それともサーバーで直接行うべきですか? 本当にわからない。

これがクライアントのコードです

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

  });
 });
}); 

あなたが私を助けてくれることを願っています!

4

3 に答える 3

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>

最もエレガントな方法ではないかもしれませんが、うまくいきます

于 2013-05-11T21:25:04.870 に答える
0

ツイートを配列にパイプしてから、制限された配列を送信する必要があります。

于 2013-05-11T09:26:24.653 に答える
0

サーバー上でそれを行う必要があります。帯域幅と時間を節約します。

送り返すオブジェクトのリストがある場合は、socket.io 経由で送信する前にリストをスライスするだけです。

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

ここで、socket.io 経由でツイートを送信すると、リストの最後の 10 件のみが取得されます。

または、リストが逆順の場合:

tweets = tweets.slice(0,10);
于 2013-05-09T21:03:07.853 に答える