把 shell 的输出 pipe 到 http.response 上后,怎么才能即时的把输出即时显示到浏览器上? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iahu
V2EX    Node.js

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

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

    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     Solana     2650 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 12:01 PVG 20:01 LAX 04:01 JFK 07:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86