Websockets / Socket.io如何在完成初始有效负载提取之前延迟更新?

时间:2016-02-05 09:30:31

标签: node.js sockets websocket socket.io

节点5.4.0 socket.io:^ 1.3.7

我不确定如何初始化帖子流的数据,同时还设置了更新的监听器(新帖子)。

我目前如何初始化流:

在下面的示例中,我有一个首先请求初始有效负载的客户端,一旦有效负载到达,它就会设置监听器以监听更新。

我是这样设计的,因此更新的推送事件不会发生 直到初始有效负载返回。

问题:

当响应从服务器返回时,会有一个时间窗口 错过潜在更新的地方(特别是如果更新量很大)。

问题:

有没有办法处理初始有效负载请求并设置更新侦听器而不会丢失更新或者在prematural上接收它们?

服务器端 - 发送初始有效负载并在请求时更新

io.on('connection', function(socket){
  console.log('a user connected to');
});

app.get('/initialData/',function(req, res){
  var initialPayload = fetchPayload();//fetch from db
  res.json(initialPayload);
}

app.post('/update',function(req, res){

  var updateData = req.body.json;
  updateData(update ,function(){
      var socket = io();
      socket.emit('update data', updateData);
      res.status(200).end();
    }
  });
});

ClientSide-调用有效负载,触发时设置监听器

import io from 'socket.io-client';
var getInitialPayload = function() {
  var socketURL = "http://localhost:3000/"
    var socket = io(socketURL);
    return new Promise(function(resolve, reject) {
    var url = 'http://localhost:3000';
    $.ajax({ 
      url: url,  
      dataType: 'json',
      success: function(initialPayload) { 
       ServerActionCreators.receiveAllPayload(initialPayload);
        socket.on('update data', data);
      },
      error: function(xhr, status, err) { 
        //print error
      }
    });
  });
}

0 个答案:

没有答案