我目前正在使用Node.js和SOcket.io开发流媒体应用。目前该应用程序完美运行,但我需要做一件事:由于它是一个流媒体应用程序,有很多数据推送到客户端,所以我只想显示服务器推送的最近10个对象。 我怎样才能做到这一点 ?我应该在客户端代码上还是直接在服务器上执行此操作?我真的不知道。
这是客户端的代码
<script src="/socket.io/socket.io.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script>
<script>
var socket = io.connect('http://192.168.1.29:5000');
socket.on('stream', function(tweet){
$('#tweetd').append(tweet+'<br>');
});
</script>
<div id="tweetd"></div>
</div>
服务器代码:
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'];
var T = new Twit({
consumer_key: ''
, consumer_secret: ''
, access_token: ''
, access_token_secret: ''
});
io.sockets.on('connection', function (socket) {
console.log('Connected');
T.stream('statuses/filter', { track: watchList },function (stream) {
stream.on('tweet', function (tweet) {
io.sockets.emit('stream',tweet.text);
console.log(tweet.text);
});
});
});
希望你能帮助我!
答案 0 :(得分:0)
您应该在服务器上执行此操作。节省带宽和时间。
如果您有要发回的对象列表,只需在通过socket.io发送之前对列表进行切片。
tweets = tweets.slice(tweets.length-10);
现在通过socket.io发送你的推文,你只会获得列表中的最后10个。
或者如果您列出的顺序相反:
tweets = tweets.slice(0,10);
答案 1 :(得分:0)
你必须在一个数组中管道你的推文,而不是发送有限的数组。
答案 2 :(得分:0)
我想我刚刚找到了解决方案。这是代码:
<script>
var tweetNum = 0;
var socket = io.connect('/');
socket.on('stream', function(tweet){
$('<div id="tweet' + tweetNum + '" class="tweet ' + (((tweetNum++)%2) ? 'odd' : 'even') + '">' +
'<div class="tw_txt">' + tweet.text + '</div>' +'</div>').prependTo('#tweetd');
if (tweetNum >= 11) {
$('#tweet' + (tweetNum - 11)).remove();
}
});
</script>
它可能不是最优雅的方式,但它有效