4

node.js socket.io と twit を使用して、Twitter ストリーミング Web アプリケーションを構築しようとしています。

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'];


io.sockets.on('connection', function (socket) {
  console.log('Connected');

  var T = new Twit({
    consumer_key:         ''
  , consumer_secret:      ''
  , access_token:         ''
  , access_token_secret:  ''
})
 T.stream('statuses/filter', { track: watchList },function (stream) {

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

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

  });
 });
}); 

これが私のクライアント側です

 <script src="/socket.io/socket.io.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script>
  <script>
    $(function(){
      var socket = io.connect('http://localhost:8080');
      socket.on('tweet', function(tweet) {
    $(
        '<div class="tweet">' + tweet.text + '</div>');
        }); 

  });

  </script>
</div>

node app.js を実行して localhost:8080 に接続しようとすると、すべて ( soket.io、jquery など) が正しく読み込まれたように見えても、空白のページが表示されます。

サーバー出力のサンプルを次に示します。

info  - socket.io started
debug - served static content /socket.io.js
debug - client authorized
info  - handshake authorized pwH0dbx4WvBhzSQXihpu
debug - setting request GET /socket.io/1/websocket/pwH0dbx4WvBhzSQXihpu
debug - set heartbeat interval for client pwH0dbx4WvBhzSQXihpu
debug - client authorized for
debug - websocket writing 1::
debug - websocket writing 5:::{"name":"stream","args":["RT @mintycreative: Great to chat       today RT @SharonHolistic: Treatments available tomorrow http://t.co/5Poq3KU08u Book yours now #WestMidsHou…"]}

デバッグ - websocket 書き込み 5:::{"name":"stream","args":["RT @laurenpeikoff: #BREAKING @ScottsdalePD が確認 - 警察は性的暴行の疑いで Michael Beasley を捜査しています。@12News @azcentr…"] }

私の間違いを修正するのを手伝ってくれることを願っています。

4

2 に答える 2

0

最初の問題は、ソケット接続が開かれるたびに新しい Twitter リスナーを構築していることです。connectionそれをイベントの外に移動する必要があります。これはおそらく理想的ではありません。Twitterモジュールが内部でそれをどのように処理しているかはわかりませんが、実際にはWebソケットが接続するたびにAPIへの新しい接続を作成している可能性があります.

クライアント側では、jQuery は少し異なる可能性があります。ツイートが発生するたびにページにツイートを追加したいだけの場合は、新しいツイートを body 要素に追加します。$('body').append()

この要旨を参照してください

于 2013-05-07T22:14:23.347 に答える