【问题标题】:send loading status back to client将加载状态发送回客户端
【发布时间】:2017-12-17 13:51:20
【问题描述】:

我正在构建一个简单的 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');

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

谢谢!

【问题讨论】:

    标签: javascript node.js shell command-line


    【解决方案1】:

    您要做的是向单个请求发送多个响应。不幸的是HTTP 本身并不像那样工作。您将无法像当前那样使用 HTTP 来实现这一点。

    一种可行的方法是在您的客户端和服务器之间创建一个WebSocket。 WebSocket 是基于 HTTP 协议创建的协议,如前所述

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

    我建议您阅读 Mozilla 开发者网络教程,或者使用 socket.ioHere's一个使用express和socketIO创建Node应用的教程

    【讨论】:

    • 感谢您的回答。我认为 Node 的一个优势,比如说 PHP 或 Python 是它很容易从服务器发送和接收数据到浏览器而无需刷新......显然不是
    猜你喜欢
    • 2015-03-26
    • 2015-10-04
    • 1970-01-01
    • 2015-01-17
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多