V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iahu
V2EX  ›  Node.js

把 shell 的输出 pipe 到 http.response 上后,怎么才能即时的把输出即时显示到浏览器上?

  •  
  •   iahu · 2016-08-12 17:25:53 +08:00 · 2756 次点击
    这是一个创建于 3026 天前的主题,其中的信息可能已经有所发展或是发生改变。

    hi,大家好。

    问一个 http 的问题。我用 node.js 把 shell 的 stdout pipe 到 http.response 上了,设置了 chunked ,但是页面要卡一段很长的时间(经常是要等后台的输出全完了)才显示。我希望能边刷 shell 输出,边在浏览器上页面 shell 的输出。

    求帮忙。谢谢!

    9 条回复    2016-08-19 14:23:51 +08:00
    bdbai
        1
    bdbai  
       2016-08-12 17:49:36 +08:00 via Android
    你用了 jQuery 处理 ajax 请求吗?
    这种场景适合用原生 XMLHTTPRequest 直接处理请求。我最近在做一个项目也用到了 chunked 实时回显文本,你可以参考一下:
    https://github.com/bdbai/nthskeys-node/blob/master/app/apis/Extractor.js
    magicdawn
        2
    magicdawn  
       2016-08-12 17:52:23 +08:00
    我之前碰到过, 试试设置 content-type: text/plain
    然后拿 chrome 试试, 应该也跟浏览器有关系
    gimp
        3
    gimp  
       2016-08-12 18:08:25 +08:00
    我用 socket.io 做过类似的东西, web 端输入网址,后台 ping ,然后实时返回给 web 页面展示。
    我也不知道主流的是不是这么搞,反正是实现了类似的功能,仅供参考

    https://github.com/sincerefly/online-ping-demo
    smilekung
        4
    smilekung  
       2016-08-12 22:53:31 +08:00
    @gimp 我也是用 websocket 搞得,不过是用来查 docker 的容器日志
    Lxxyx
        5
    Lxxyx  
       2016-08-14 13:52:34 +08:00   ❤️ 1
    @bdbai
    高中生?很 6 啊,项目已 Star
    bdbai
        6
    bdbai  
       2016-08-14 14:05:40 +08:00 via Android
    @Lxxyx 多谢 star :)
    iahu
        7
    iahu  
    OP
       2016-08-15 16:27:25 +08:00
    多谢大家的回复。
    换成 webSocket 是可以的。
    HTTP 设置`content-type: text/plain`没用,但是我也记得以前做过的项目设置后在 Chrome 下是有效的。
    serial
        8
    serial  
       2016-08-16 13:13:25 +08:00
    不要用 pipe , stdout 有行缓冲的,缓冲区满了行才会发出去。自己 write flush
    Kei
        9
    Kei  
       2016-08-19 14:23:51 +08:00
    ```
    let child = shell.exec(command, {async: true}, function (err, stdout, stderr) {
    cb(err, {err: stderr})
    })
    child.stdout.on('data', function (data) {
    app.io.emit('output', {output: data})
    })
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4806 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 01:15 · PVG 09:15 · LAX 17:15 · JFK 20:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.