繁体   English   中英

服务器进程通过Socket.IO的进度

[英]Server process progress over Socket.IO

我正在尝试在服务器的前端显示进度条。 我正在尝试使用emits通过websockets( SocketIO )发送进度更新消息,但是我面临的问题是,它们在差异循环结束时会同时聚集在一起,而不是在它们发出时同时出现。

这确实是我正在使用的代码。

//Server side function
functionThatShouldEmitInTime(data){
    readFileWithCallback(data, function(dataUpdated){
        readFileWithCallback(dataUpdated, function(dataEvenMoreUpdated){
            var w = dataEvenMoreUpdated.w;
            for (var c in w) {
                for (var e in c){
                    var to_be_filled;
                    //Do stuff
                    for (var a in e) {
                        //do stuff with to_be_filled
                        for(var pr in a){
                            //do stuff with to_be_filled
                            for(var pe i pr){
                                //do stuff with to_be_filled
                            }
                        }
                    }
                    writeFileAsync(to_be_filled);
                    console.log(to_be_filled.name + ' is being written');
                    socket.emit('file:processed', 'type_of_file');
                }
            }
        });
    });
};

当所有循环结束时,仅发送发射,这可以正常工作。 因此,客户端中的进度会在操作结束时立即显示。 并没有逐渐发生。

我尝试通过以下修改强制节点发出。 使用process.nextTick();

//Server side function
functionThatShouldEmitInTime(data){
    readFileWithCallback(data, function(dataUpdated){
        readFileWithCallback(dataUpdated, function(dataEvenMoreUpdated){
            var w = dataEvenMoreUpdated.w;
            for (var c in w) {
                for (var e in c){
                    var to_be_filled;
                    //Do stuff
                    for (var a in e) {
                        //do stuff with to_be_filled
                        for(var pr in a){
                            //do stuff with to_be_filled
                            for(var pe i pr){
                                //do stuff with to_be_filled
                            }
                        }
                    }
                    writeFileAsync(to_be_filled);
                    console.log(to_be_filled.name + ' is being written');
                    process.nextTick(force_emit);
                }
            }
        });
    });
};

function force_emit() {
    socket.emit('file:processed', 'type_of_file');
}

我还阅读并尝试了此StackOverflow帖子中的所有信息,但未成功:

在循环内发送多次发射

Nodejs SocketIO发射功能循环

SocketIo发出循环,直到客户端响应

SocketIo内部循环不起作用

我想知道是否有解决方法或更好的方法来实现此目的。

顾名思义,writeFileAsync是一个异步函数,因此只要回调中的异步返回都会发出事件,以真正显示进度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM