socket.io正在断开我的节点twitter应用程序中的所有其他连接用户

时间:2013-12-21 09:56:17

标签: node.js twitter stream socket.io

当我以隐身模式(不同的会话)打开两个浏览器窗口时。

我得到一个流,一个工作正常...新的推文按预期从twitter流API进入。问题是当另一个窗口加载页面时,第一个隐身窗口会断开连接。

这是我正在使用的代码。我不确定twitter是否可能不允许同步流或者它是否符合我的逻辑。

var mod = module.exports = {}
    , twitter = require('twitter')
    , c = console;

var io
    , sock
    , intv = {};

function onNewsInit(data){
    setTimeout(function(){
        stream(streamQuery);
    }, 1000 * 5);
}

function stream(query){
    c.log('stream query', query);

    twit.stream('statuses/filter', {track:query}, function(stream) {
        stream.on('data', function (data) {
            c.log(data);
            var item = getItem(query, data);

            c.log('stream item', item);
            if ( item ) {
                sock.emit('twitter:item', { item: item });
            }

        });
        stream.on('end', function (response) {
            // Handle a disconnection
            c.log('stream end');
        });
        stream.on('destroy', function (response) {
            // Handle a 'silent' disconnection from Twitter, no end/error event fired
            c.log('stream destroy');
        });

        // Disconnect stream after five seconds
        sock.on('news:end', stream.destroy);
        sock.on('disconnect', stream.destroy);
    });
}


mod.register = function register(soc, sio) {
    c.log('news register');

    io = sio;
    sock = soc;

    sock.on('news:init', onNewsInit);
    sock.on('news:end', onNewsEnd);

};

app.js

io.sockets.on('connection', function(sock){
    news.register(sock, io);
});

有一个客户能够断开另一个客户端的原因吗?

1 个答案:

答案 0 :(得分:0)

事实证明,twitter流API只允许一个同时连接。

如下所述: https://dev.twitter.com/docs/streaming-apis/streams/public

  

连接

     

每个帐户只能与公众建立一个常设连接   端点,并连接到公共流不止一次   相同的帐户凭据将导致最旧的连接   断开。

     

进行过多连接尝试的客户端(成功和   不成功)冒着自动禁止IP的风险。