显示服务器端运行的长进程的状态

2024-06-04

我正在基于 Node.js 的 Web 应用程序中进行 CSV 导入。 大多数给定的 CSV 文件都有数万条记录,并且需要几分钟的时间。

因此,在导入完成之前,我想向用户显示“当前正在导入...”消息。

我想要创建的内容类似于 Github 的分叉屏幕。按存储库右上角的分叉按钮后,它会显示消息“分叉/应该只需要几秒钟”。直到 fork 完成。 此外,我想添加进度条来指示已处理记录的百分比。

目前我的实现是:

  1. 客户端发送带有 CSV 数据的请求
  2. 服务器处理接收到的 CSV 并将记录插入数据库。
  3. 如果 CSV 有效,服务器响应 200。

但实施后用户无法看到当前状态。甚至有时候socket会挂掉。

我正在考虑以下重新实现:

  1. 客户端发送带有 CSV 数据的请求
  2. 服务器响应 200 告诉客户端已收到 CSV
  3. 服务器开始处理收到的 CSV 并将记录插入数据库。

但是,我不知道:

  1. 客户如何知道导入已完成
  2. 客户端如何知道 CSV 处理和 DB 插入何时发生错误

服务器端如何实现? 提前致谢 ;)


你需要使用socket.io在这里跟踪进度。一旦您收到 CSV,您的客户端就可以连接到套接字。

Server:

io.on('connection', function (socket) {
    console.log('CONNECTED');
    socket.join('progressSession');
});

您可以定期发出progress事件让客户端知道您已处理了多少条记录。 (我希望您异步处理记录,或者至少可以在两者之间运行一些其他代码)

io.sockets.in('progressSession').emit('progress', noOfRecords);

并且,客户可以收听progress事件并将其显示给用户

var socket = io.connect('http://localhost:9000');
socket.on('progress' , function (status){
    console.log(status);
    // show status to the user
});

如果需要更清晰的说明,请发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

显示服务器端运行的长进程的状态 的相关文章

随机推荐