Как отправить данные из массива в socket.io по одному - PullRequest
0 голосов
/ 01 июня 2018

У меня есть массив, в котором есть 1000 объектов, когда пользователь подключается к веб-сайту. Я хочу отправить ему эти данные по одному.Но, к сожалению, этот код не работает.

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

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

Когда я открываю браузер, мне нужно подождать 1,5 секунды, а затем я получаю все данные.Есть ли у вас идеи, как получать эти данные по одному, чтобы быть в режиме реального времени.Спасибо

1 Ответ

0 голосов
/ 04 июня 2018

Я нашел способ, как этого добиться.Я думаю, что из-за того, что я отправлял столько данных одновременно в стоковом браузере, он не смог обновить, и через 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);
}

Я жду ваших комментариев, что вы думаете об этом подходе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...