显示在服务器端运行的长进程的状态
我正在为基于Node.js的Web应用程序中的CSV导入工作。 大多数给定的CSV文件有成千上万的logging,这需要几分钟的时间。
因此,直到导入完成,我想显示用户“正在导入…”消息。
我想创build的类似于Github的分叉屏幕。 在按回车右上angular的叉子button后,显示“叉子/只应该花费几秒钟”的信息。 直到叉完成。 另外,我想添加进度条,希望能够显示已处理logging的百分比。
目前我的实现是:
- 客户端使用CSV数据发送请求
- 服务器进程接收到CSV并将logging插入数据库。
- 如果CSV有效,服务器响应200。
但是实现用户不能看到当前状态。 即使有时sockets挂断。
我正在考虑重新实现:
- 客户端使用CSV数据发送请求
- 服务器响应200来告诉客户端已收到CSV
- 服务器开始处理收到的CSV并将logging插入数据库。
不过,我不知道:
- 客户如何知道导入完成
- 客户如何知道在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/这样的东西来发送更新到客户端。