Как сервер (узел) может сообщить клиенту, что есть обновления для загрузки?

В настоящее время я изучаю свой путь к серверу nodeJS. Я делаю рендеринг на стороне клиента с помощью ReactJS.

Меня интересует одна вещь: когда у меня есть новые данные, которые мне нужно, чтобы клиент извлек, как я могу сообщить об этом клиенту? И как лучше всего это сделать?

Например, для какого-то чата или подобных вещей.


person MoeSattler    schedule 27.08.2015    source источник
comment
Это невозможно, если только сервер не настроен на отправку обновлений, а не на получение их клиентом. (также известные как веб-сокеты)   -  person Kevin B    schedule 27.08.2015


Ответы (2)


HTTP — это протокол запрос-ответ, который может быть инициирован только на стороне клиента. Поэтому вам нужно искать обходные пути, такие как комета или длинный опрос, или альтернативные технологии, такие как веб-сокеты, которые обеспечивают двустороннюю связь в браузере.

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

http://socket.io/

person ralh    schedule 27.08.2015

Взгляните на http://socket.io/

Я могу только предложить пример.

сервер.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);
    });
  });

интерфейс.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>

Таким образом, в основном, когда мой файл данных был обновлен на сервере, я использовал веб-сокет, чтобы поддерживать активное соединение между моим сервером и клиентом. Он будет обновлять клиентскую часть новыми данными из файла каждый раз, когда он будет изменен.

person Joey    schedule 27.08.2015