服务器(节点)如何让客户端知道有更新提取?

时间:2015-08-27 16:08:39

标签: node.js server

我目前正在学习nodeJS服务器。 我使用ReactJS进行客户端渲染。

我想知道的一件事是,当我有新数据时我需要客户端获取,我如何让客户知道?最好的方法是什么?

例如,某种聊天或类似的事情。

2 个答案:

答案 0 :(得分:1)

查看http://socket.io/

我只能提供一个例子。

server.js

io.sockets.on('connection', function(socket) {
  console.log(__dirname);
  // watching file
  fs.watchFile(__dirname + '/example.txt', function(curr, prev) {
    // on file change we can read the new file
    fs.readFile(__dirname + '/example.txt', function(err, data) {
      if (err) throw err;
      // parsing the new txt and make it json just my preference
      var json = parser.toJson(data);
      // send the new data to the client
      socket.volatile.emit('notification', json);
    });
  });

frontend.html

<script src="socket.io/socket.io.js"></script>
    <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    <script>
    // creating a new websocket
    var socket = io.connect('http://localhost:8000');
    // on every message recived we print the new datas inside div
    socket.on('notification', function (data) {
        // json string into a valid javascript object
        var _data = JSON.parse(data);

        $('#container').html(_data.test.sample);
        $('time').html('Last Update:' + new Date());
    });
    </script>

所以基本上当我在服务器上更新我的数据文件时,我使用websocket来保持我的服务器和客户端之间的连接活动。每次更改时,它都会使用文件中的新数据更新客户端。

答案 1 :(得分:1)

HTTP是一种请求 - 响应协议,只能在客户端启动。因此,您需要查看诸如comet或long-polling之类的解决方法,或者使用诸如websockets之类的替代技术,这些技术允许在浏览器中进行双向通信。

http://www.pubnub.com/blog/http-long-polling/

http://socket.io/