我正在使用Twit构建一个Twitter流,用户可以从客户端更改搜索词。 搜索字词将保存在缓冲区中,并根据Twitters重新连接规则添加到流中。
我的代码如下所示:
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
});
});
我的问题是通过新搜索重新初始化流。
在inteval-function stream.stop()
确实停止流(并且stream.start()也可以工作)但stream = T.stream(...
打开一个新连接而不是更新当前连接。因此,用户正在收听的流是不受约束的,并且用户停止接收数据直到刷新浏览器。
有关如何使用Twit执行此操作的任何想法?客户之间的任何实际差异?其他建议?
编辑: a similiar question的答案有一个过时的链接。我真的希望看到带有" 指令的页面如何更改谓词并使用户体验尽可能顺畅"
答案 0 :(得分:2)
也许不是最佳实践,但我最终通过直接编辑流对象来解决问题:
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);