Webtailf (tail -f to the web-browser)

tail命令和tailf命令对于每个玩linux的人相比都特别熟悉,这里就不细表了。

但是如果你想把tailf后输出到web端,怎么做?对!长连接websocket(我称之为webtailf)。

websocket
websocket

但是具体要怎么做?我搜了github,发现竟然没有好的解决方案,不过在这篇文章里面,发现了一条神奇的命令:

(echo -e 'HTTP/1.1 200 OK\nAccess-Control-Allow-Origin: *\nContent-type: text/event-stream\n' \
&& tail -f /path/to/some/file | sed -u -e 's/^/data: /;s/$/\n/' ) | nc -l 1234

ps. 简书代码不支持折行,我给手动折行了,人家本身是一行的。

然后配合这段js代码:

new EventSource("http://localhost:1234/").onmessage = function(e) {
    console.log(e.data);
};

你就可以霸气的按F12,在console里面看到tail命令输出的内容了!


咱们看看这行霸气的shell命令(真是1行shell==1w行C)做了什么:

(echo -e 'HTTP/1.1 200 OK\nAccess-Control-Allow-Origin: *\nContent-type: text/event-stream\n'

这个简单,就是返回http头,说明这个是长连接。

&& tail -f /path/to/some/file | sed -u -e 's/^/data: /;s/$/\n/') | nc -l 1234

这句是将文件tailf出来,然后传给sed,进行断句,然后在每行前面加上data: ,之后和http头一起打包,传给netcat,通过监听1234端口,发送出去,之后浏览器就可以拿到tailf的信息了。

当然,这只是一个玩具,因为nc只支持一次连接,如果连接断了,需要重启nc。

那么,说到最后,什么才是可用的?

websocketd --port 1234 tail -f /path/to/file

官网在这里,Github在这里,7K Star哦!


为了你们方便,同样给出客户端的demo吧(同样也是简单到爆!):

var ws = new WebSocket('ws://localhost:1234/');
ws.onmessage = function(event) {
     console.log(event.data);
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,254评论 2 33
  • 本文承接之前写的三十分钟学会AWK一文,在学习完AWK之后,趁热打铁又学习了一下SED,不得不说这两个工具真的堪称...
    mylxsw阅读 4,421评论 3 74
  • 第1章 小试牛刀 $ 是普通用户,# 表示管理员用户 root。 shebang:#!。sharp / hash ...
    巴喬書摘阅读 6,440评论 1 4
  • sed与awk实例 文本间隔 在每一行后面增加一空行 将原来的所有空行删除并在每一行后面增加一空行。这样在输出的文...
    stuha阅读 1,930评论 0 21
  • 基础命令 主要的命令和快捷键 Linux系统命令由三部分组成:cmd + [options]+[operation...
    485b1aca799e阅读 1,133评论 0 0