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

我正在为基于Node.js的Web应用程序中的CSV导入工作。 大多数给定的CSV文件有成千上万的logging,这需要几分钟的时间。

因此,直到导入完成,我想显示用户“正在导入…”消息。

我想创build的类似于Github的分叉屏幕。 在按回车右上angular的叉子button后,显示“叉子/只应该花费几秒钟”的信息。 直到叉完成。 另外,我想添加进度条,希望能够显示已处理logging的百分比。

目前我的实现是:

  1. 客户端使用CSV数据发送请求
  2. 服务器进程接收到CSV并将logging插入数据库。
  3. 如果CSV有效,服务器响应200。

但是实现用户不能看到当前状态。 即使有时sockets挂断。

我正在考虑重新实现:

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

不过,我不知道:

  1. 客户如何知道导入完成
  2. 客户如何知道在CSV处理和数据库插入中发生错误的时间

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

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

服务器:

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

您可以定期发送progress事件,让客户知道您已经处理了多lesslogging。 (我希望你是asynchronous处理logging,或者至less可以运行其他代码)

 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 }); 

评论是否需要更清晰。

如此发送请求,立即返回状态以确认或拒绝CSV valididy并完成响应。 然后使用像http://socket.io/这样的东西来发送更新到客户端。