更改Twitterstream谓词(Node.js,socket.io)

我正在用Twit构build一个twitterstream,用户可以从客户端更改search词。 search词将被保存在缓冲区中,并按照Twitters重新连接规则添加到stream中。

我的代码看起来像这样:

var Twit = require('twit'); var T = new Twit({ consumer_key: 'xxxxxxxxx' , consumer_secret: 'xxxxxxxxx' , access_token: 'xxxxxxxxx' , access_token_secret: 'xxxxxxxxx' }) var searchStr = "orange"; var stream = T.stream('statuses/filter', { track: searchStr }); setInterval(function(){ newSearchStr = getNewSearchStr(); stream.stop(); stream = T.stream('statuses/filter', { track: newSearchStr}); },60*5*1000); io.sockets.on('connection', function(socket) { //SAVE USER AND INTITIAL SEARCH CRITERIA // ... stream.on('tweet', function (tweet) { socket.emit('data',tweet); }); socket.on('setSearchStr', function (searchStr) { //SAVE SEARCH TO BUFFER FOR getNewSearchStr() TO OBTAIN }); }); 

我的问题是用新的search重新初始化stream。

在inteval-function中, stream.stop()会停止stream(并且stream.start()也可以),但stream = T.stream(...打开一个新的连接而不是更新当前的连接。正在收听是不协调的,用户停止接收数据,直到刷新浏览器。

任何想法如何与Twit做到这一点? 客户之间的任何实际差异? 其他build议?

编辑: 类似的问题的答案有一个过时的链接。 我真的很想看到这个页面,其中有“ 如何改变谓词并使用户体验尽可能顺利

也许不是最好的做法,但我最终通过直接编辑stream对象来解决问题:

 setInterval(function(){ //check if criteria has changed if(stream.params.track != searchStr){ console.log("Reconnecting with " + searchStr); stream.stop(); stream.params.track = searchStr; stream.start(); } else { console.log("Criteria unchanged"); } },60*5*1000);