将加载状态发送回客户端

时间:2017-12-17 13:51:21

标签: javascript node.js shell command-line

我正在构建一个简单的Web应用程序,它将文件作为输入,运行一些命令行操作,然后返回一个新文件(它是一个在线转换器)。整个过程需要1-2分钟,因为有8或9个命令行操作,有些需要花费更多时间。

我正试图找出一种将转换状态实时发送到客户端的方法。

目前我的代码如下:

app.post('/convert/', function(req, res) {
   cmd.run(/* operation 1 */);
   cmd.run(/* operation 2 */);
   ...
   cmd.run(/* operation 7 */);
   cmd.run(/* operation 8 */);
   cmd.run(/* operation 9 */);
});

我想知道当一个命令行命令执行完毕而没有任何需要刷新时,是否有办法将某些内容发送回客户端。 最终的目标是拥有一个干净的加载栏。我知道解决方案可能在于Ajax,但在这一点上,我太初衷了解我应该做什么。

我试过像

这样的东西
res.write('step 1 done');

res.send('step 1 done');

但它会停止执行脚本的其余部分并在浏览器中加载另一个页面。我还想知道如何在客户端的浏览器中处理这个响应。

谢谢!

1 个答案:

答案 0 :(得分:3)

您要做的是向单个请求发送多个响应。不幸的是HTTP本身并不像那样。你现在正在使用HTTP,你将无法实现这一目标。

一种可行的方法是在客户端和服务器之间创建WebSocket。 WebSocket是根据HTTP协议创建的协议,如上所述

  

WebSockets是一种先进技术,可以在用户的​​浏览器和服务器之间打开交互式通信会话。使用此API,您可以将消息发送到服务器并接收事件驱动的响应,而无需轮询服务器以进行回复。

我建议您阅读Mozilla Developer Network教程,或使用socket.ioHere's有关如何使用express和socketIO创建Node应用程序的教程