sockets.io emit消息延迟到post完成
我正在上传一个文件(使用multer)并对其进行一些处理,我希望在处理过程中显示进度。我的问题是,客户端在处理完成后接收所有更新。因此,进度条从0%变为100%,而不是随着代码的进行而增量更新 服务器端sockets.io emit消息延迟到post完成,sockets,post,express,socket.io,multer,Sockets,Post,Express,Socket.io,Multer,我正在上传一个文件(使用multer)并对其进行一些处理,我希望在处理过程中显示进度。我的问题是,客户端在处理完成后接收所有更新。因此,进度条从0%变为100%,而不是随着代码的进行而增量更新 服务器端 var multer = require('multer') var uploading = multer({ dest: 'uploads/' }) app.post('/result', uploading.single('audio'), function(req, res) {
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))) + '%';
}
一旦你的帖子到达服务器,它就会运行block
app.post('/result',upload.single('audio'),函数(req,res){
...
}
这意味着你会马上得到
io.emit('message',{'message':'upload completed!'})
io.emit('update',{'step':'Converting Audio',percent:2/10})
然后你等着,等着它运行
音频编码(新路径)
没有输出任何内容。当音频代码完成时,您将获得 坚持到底
您是否在
音频\u code
中发出任何进展?如果没有,则这就是为什么您没有获得任何进展增量。我解决了这个问题。从socket切换到primus向我表明,由于我的代码计算量大,并且同步运行,它会阻塞服务器一段时间,足以让websocket超时nd close。因此,我所要做的就是在超时之前增加服务器响应乒乓球检查的时间。我对这一点不熟悉,因此可能缺少一个简单的概念。您如何发布数据?您能显示该代码吗?我猜这是一个阻塞call@greg_diesel我用的是multer我在问题How lon中添加了这个信息g不执行音频代码(新路径)运行需要几分钟?这取决于上传文件的大小,这就是为什么我要发出更新消息来显示代码的步骤和完成的程度。实际上,上传完成后发出和更新发出都是在代码完成后收到的,更新发出也在音频代码中发送。我还应该在文件发布之前,及时接收任何一方发送的任何发射