Javascript 节点,socket.io-当新条目添加到新闻提要时更新客户端?
我已经用Javascript 节点,socket.io-当新条目添加到新闻提要时更新客户端?,javascript,jquery,node.js,sockets,rss,Javascript,Jquery,Node.js,Sockets,Rss,我已经用socket.io创建了节点的客户端和服务器server正在执行4个get新闻提要请求并获取数据。这些数据通过socket.io发送到客户端 client正在显示特定socket.io事件发生时的新闻提要。 这一次效果很好。这是密码和密码 server.js var app = require('http').createServer(handler) , io = require('socket.io').listen(app) , fs = require('fs') ,
socket.io创建了节点的客户端
和服务器
server
正在执行4个get
新闻提要请求并获取数据。这些数据通过socket.io
发送到客户端
client
正在显示特定socket.io
事件发生时的新闻提要。
这一次效果很好。这是密码和密码
server.js
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
, redis = require("redis");
var http = require("http");
// initialize the container for our data
var data = "";
var nfs = [
"http://economictimes.feedsportal.com/c/33041/f/534037/index.rss",
"http://www.timesonline.co.uk/tol/feeds/rss/uknews.xml",
"http://www.independent.co.uk/news/business/rss",
"http://www.dailymail.co.uk/money/index.rss"
];
//setInterval(function() {
for(var i=0; i<nfs.length; i++){
//console.log(nfs[i]);
http.get(nfs[i], function (http_res) {
// this event fires many times, each time collecting another piece of the response
http_res.on("data", function (chunk) {
// append this chunk to our growing `data` var
data += chunk;
});
// this event fires *one* time, after all the `data` events/chunks have been gathered
http_res.on("end", function () {
// you can use res.send instead of console.log to output via express
console.log("data received");
});
});
}
//}, 30000);
app.listen(8080);
function handler (req, res) {
fs.readFile(__dirname + '/client.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.on('connection', function (socket) {
//setInterval(function() {
socket.emit('news', data);
/*socket.on('my other event', function (data) {
console.log(data);
});*/
//}, 5000);
});
我对socket.io
的理解是,我们不需要长时间的服务器轮询,因此server
如何知道新闻已添加到受尊重的新闻提要中
当新闻被添加到新闻提要rss中时,如何使用新添加的新闻更新客户端?
更新
好的,从所有的回答中,我得到一点,socket.io
不可能知道新条目已经添加。那么,我如何知道(哪些工具/库确实需要知道新条目已经添加并更新了客户端)???从新闻源检索消息完全独立于socket.io,除非新闻源在其端实现套接字,并且您的服务器成为其客户端。因此,您必须继续使用http请求轮询它们,以了解它们是否更新了数据
为了通知客户端更新,您只需发出新闻事件。假定您在服务器上有逻辑,以确保您只发送以前未发送的事件。节点无法知道何时向新闻提要添加了新条目。你必须像现在一样对新闻服务进行民意调查。这实际上与Node或Socket.io无关,除非我完全误解了您的要求。谢谢您的回答。将for
循环置于setInterval
中是否是一种良好的做法???我试过了,但是检索到了相同的数据。你能告诉我如何实现/避免这种情况吗???你能告诉我当通过节点向新闻提要添加新条目时如何更新客户端吗???目前,它正在向客户端追加相同的条目。
<html>
<head>
<script src="https://cdn.socket.io/socket.io-1.2.1.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
//socket io client
var socket = io.connect('http://localhost:8080');
//on connetion, updates connection state and sends subscribe request
socket.on('connect', function(data){
setStatus('connected');
socket.emit('subscribe', {channel:'notif'});
});
//when reconnection is attempted, updates status
socket.on('reconnecting', function(data){
setStatus('reconnecting');
});
//on new message adds a new message to display
socket.on('news', function (data) {
console.log(data);
//socket.emit('my other event', { my: 'data' });
addMessage(data);
});
/*socket.on('news', function (data) {
debugger;
socket.emit('my other event', { my: 'data' }
var msg = "";
if (data) {
msg = data;
}
addMessage(msg);
});*/
//updates status to the status div
function setStatus(msg) {
$('#status').html('Connection Status : ' + msg);
}
//adds message to messages div
function addMessage(msg) {
//debugger;
var $xml = $(msg);
var html = '';
$xml.find("item").each(function() {
var $item = $(this);
html += '<li>' +
'<h3><a href ="' + $item.find("link").text() + '" target="_new">' +
$item.find("title").text() + '</a></h3> ' +
'<p>' + $item.find("description").text() + '</p>' +
// '<p>' + $item.attr("c:date") + '</p>' +
'</li>';
});
$('#result').prepend(html);
}
</script>
</head>
<body>
<div id="status"></div><br><br>
<ul id="result"></ul>
</body>
</html>