Express / Socket.io:每个请求一个套接字的正确方法

时间:2012-09-11 19:53:46

标签: node.js express socket.io

我正在尝试使用Express,Socket.io和ntwitter模块构建一个简单的Node应用程序,这样你就可以搜索一个术语(下面是req.params.searchTerm),ntwitter将搜索它并输出通过socket.io传播。

但是,我遇到了错误,打开了多个窗口,或关闭了一个窗口,然后立即打开一个窗口。有时搜索词没有更新,有时会抛出某种socket.io错误。有人可以澄清正确的方法来解决我的错误吗?提前致谢。代码如下。

var server = http.createServer(app);

var io = require('socket.io').listen(server);

server.listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

app.get('/:stream', function(req, res) {
 res.render('stream', { title: 'Search Twitter | ' + req.params.searchTerm });
    io.sockets.on('connection', function(socket) {

    var publishFlag = true;
    setInterval(function() {
        publishFlag = true;
    }, 1000);

    twit.stream('statuses/filter', { track: [req.params.searchTerm] },
        function(stream) {
            stream.on('data', function(tweet) {
                if(publishFlag) {
                    socket.emit('tweet', tweet);
                    publishFlag = false;
                }
            });
        }
    );
  });
});

1 个答案:

答案 0 :(得分:4)

它认为这有点像你想做的事情:

服务器端:

var server = http.createServer(app);

var io = require('socket.io').listen(server);

server.listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

app.get('/:stream', function(req, res) {
 res.render('stream', { title: 'Search Twitter | ' + req.params.searchTerm });
});

io.sockets.on('connection', function(socket) {

    socket.on('stream', function(searchTerm){

        twit.stream('statuses/filter', { track: [searchTerm] },
            function(stream) {
                stream.on('data', function(tweet) {
                    socket.emit('tweet', tweet);
                });
            }
        );
    };
});

客户端(/:stream)

var socket = io.connect('http://localhost');
socket.on('tweet', addTweetOnPage);
socket.emit('stream', searchTerm);