2016-01-14 1 views
0

Я загружаю файл (используя multer) и обрабатываю его, и я хочу показать прогресс, пока я работаю над ним. моя проблема в том, что клиент получает все обновления после завершения обработки. поэтому индикатор выполнения переходит от 0 до 100% вместо постепенного обновления по мере продвижения кода.sockets.io emit сообщения задерживаются до завершения записи

на стороне сервера

var multer = require('multer') 
var uploading = multer({ dest: 'uploads/' }) 


app.post('/result', uploading.single('audio'), function(req, res) { 
    var oldPath = req.file.path; 
    var newPath = req.file.destination + req.file.originalname; 
    fs.renameSync(oldPath, newPath) 
    var ext = newPath.substring(newPath.length-3); 
    io.emit('message',{'message': 'upload completed !'}); 
    console.log('1st update'); 
    if (ext =='mp3' || ext == 'wav') 
    { 
     //console.log('running audio code'); 
     io.emit('update',{'step': 'Converting Audio',percent: 2/10}); 
     audio_code(newPath); 
     //res.render('Results_Audio', { }); 
    } 
    else if (ext =='avi' || ext == 'mp4') 
    { 
     console.log('run video code'); 
     res.render('Results_Video', { }); 
    } 
}); 

на стороне клиента

socket.on('update',function(data) { 
     console.log(data); 
     Update(data);}); 

    function Update(data){ 
     document.getElementById('NameArea').innerHTML = data.step; 
     console.log(data.percent*100); 
     document.getElementById('ProgressBar').style.width = data.percent*100 + '%'; 
     document.getElementById('percent').innerHTML = (Math.round((data.percent*100))) + '%'; 
     } 
+0

Я новичок в этом, поэтому мне может быть не хватает простой концепции – mhmsa

+0

Как вы отправляете данные? Можете ли вы показать этот код? Я предполагаю, что это блокирующий вызов –

+0

@greg_diesel Я использую multer, я добавил эту информацию в вопрос – mhmsa

ответ

0

Я решил проблему. переход от сокета к primus показал мне, что, поскольку мой код был немного вычислительно интенсивным и выполнялся синхронно, он блокировал сервер на время, достаточное для тайм-аута и закрытия websocket. поэтому все, что я должен был сделать, это увеличить время, разрешенное для сервера, чтобы ответить на проверку пинг-понга до истечения времени.

0

Как только ваш пост попадает на сервер будет работать блок

app.post('/result', uploading.single('audio'), function(req, res) { ... }

означает, что вы немедленно получите

io.emit ('message', {'message': 'upload completed!'});

io.emit ('update', {'step': 'Converting Audio', percent: 2/10});

Тогда вы будете ждать, пока это работает

audio_code (NEWPATH);

Ничего не выводит.
, после завершения аудио_кода вы получите до финиша.

Вы испускаете какой-либо прогресс внутри audio_code? Если нет, значит, вы не получаете никаких изменений в ходе.

+0

Фактически выгружаемый полный эмиссионный сигнал и исправление обновления принимаются после код завершен вместе с обновлениями, отправленными внутри аудиокода. Я также должен сказать, что любые выбросы, отправленные с обеих сторон, принимаются своевременно до публикации файла – mhmsa

 Смежные вопросы

  • Нет связанных вопросов^_^