首页 > 解决方案 > 如何将数组中的数据一一发送到socket.io

问题描述

当用户连接到网站时,我有一个包含 1000 个对象的数组,我想将这些数据一一发送给他。但不幸的是,这段代码不起作用。

io.on('connection', (socket) =>{
   console.log('made socket connection');

  for(i=0; i<data.length;i++){
    socket.emit('initial', data[i]);
  }
});

当我打开浏览器时,我需要等待 1.5 秒,然后我才能收到所有数据。您是否知道如何实时接收这些数据。谢谢

标签: node.jswebsocketsocket.io

解决方案


我找到了实现这一目标的方法。我认为这是因为我在股票浏览器上同时发送了这么多数据,无法刷新,1 秒后(添加所有数据)浏览器刷新并显示所有数据。我不确定我的理解是否正确。但这是我添加的代码以使其正常工作。

io.on('connection', (socket) =>{
 console.log('made socket connection');
 var senddata = function(i){

    if(i<data.length){
        socket.emit('initial', data[i], function(confirmation){
            i++       
            senddata(i);
        });
    }
 }
 senddata(0);
}

所以你怎么看我在等待回调,所以现在我看到数据一一出现。但是由于回调所以请求客户端-服务器和服务器-客户端需要更多的时间来加载浏览器中的所有数据。这就是我改变将部分数据发送到浏览器的方法并且只为每个数组数据进行少量回调的方式。我编写了简单的函数来将数组拆分为几个较小的数组,所以现在我们在浏览器和服务器之间拆分工作。

io.on('connection', (socket) =>{
 console.log('made socket connection');
 function sendinit(start, jump){
    var last = start+jump;
    if(last<data.length){
        socket.emit('initial', data.slice(start,last), function(confirmation){
            sendinit(last,jump);
        });
    }
    else if(last>=data.length){
        socket.emit('initial', data.slice(start,data.length), function(confirmation){
            console.log('data have been sent');
        });
    }
 }
 sendinit(0,200);
}

我正在等待您的评论,您如何看待这种方法?


推荐阅读