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>