技巧之如何快速使用websocket来监控标准输出
为啥是Websocket
- 服务端可以主动推送消息到浏览器端。比如服务端实时在打印日志,这是一个标准输出,可以实时将日志推送到浏览器。
为啥用websocketd (https://github.com/joewalnes/websocketd)
- 后台脚本不限语言,标准输入(stdin)就是 WebSocket 的输入,标准输出(stdout)就是 WebSocket 的输出。(http://www.ruanyifeng.com/blog/2017/05/websocket.html)
举例
- 定时打印当前时间
import datetime,time
from sys import stdout
while True:
now = time.strftime("%Y-%m-%d %H:%M:%S")
print now
stdout.flush()
time.sleep(2)
- 这是标准输出
root@ubuntu:~# python test.py
2018-12-17 09:57:37
2018-12-17 09:57:39
2018-12-17 09:57:41
2018-12-17 09:57:43
2018-12-17 09:57:45
2018-12-17 09:57:47
- 启动websocketd
root@ubuntu:~# websocketd --port=9000 python test.py
- 浏览器连接websocketd服务
<!DOCTYPE html>
<html>
<head>
<title>websocketd example</title>
<style>
#count {
font: bold 150px arial;
margin: auto;
padding: 10px;
text-align: center;
}
</style>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>
<table border="1px #ooo" id="logtable" cellpadding="0"
cellspacing="0" width="30%">
<tr align="center">
<td width="100%">log</td>
</tr>
</table>
<script>
function addTr(tab, row, trHtml){
var $tr=$("#"+tab+" tr").eq(row);
if($tr.size()==0){
alert("id not exit");
return;
}
$tr.after(trHtml);
};
//addTr('logtable', -1, 'xxxxxxxxxx');
var ws = new WebSocket('ws://' + (location.host ? location.host : "localhost:9000") + "/");
ws.onopen = function() {
document.body.style.backgroundColor = '#cfc';
};
ws.onclose = function() {
document.body.style.backgroundColor = null;
};
ws.onmessage = function(event) {
console.log(event.data);
//document.getElementById('count').textContent = event.data;
addTr('logtable', -1, '<tr><td>' + event.data + '</td></tr>')
};
</script>
</body>
</html>
- 效果图
技巧之如何快速使用websocket来监控标准输出的更多相关文章
- 八问WebSocket协议:为你快速解答WebSocket热门疑问
一.引言 WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持.它使用方面.应用广泛,已经渗透到前后端开发的各种场景中. 对http一问一答 ...
- Windows下快速安装CACTI流量监控
Windows下快速安装CACTI流量监控 原文 http://os.51cto.com/art/201111/300977.htm CACTI是一套PHP程序,它利用SNMPGET采集数据,使用R ...
- 【win8技巧】win8快速切换后台应用
今天闲着没事来介绍下win8的使用技巧,不得不说win8把PC带入了Pad时代. 第一招:Win + Tab 在屏幕的最左边就会出现我们想要的后台应用,类似安卓的长按Home的最近任务. 第二招:Al ...
- SpringBoot+WebSocket实时监控异常
写在前面 此异常非彼异常,标题所说的异常是业务上的异常. 最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去处理. 因为 ...
- 使用Node.js快速搭建WebSocket server
原文地址:http://my.oschina.net/yushulx/blog/309413 目录[-] 安装 服务端 客户端 参考 安装 ? 1 npm install ws 服务端 server. ...
- 「技巧」如何快速安装 Sketch 插件
Sketch拥有强大丰富的插件,但是这些插件天各一方,四处查找下载地址非常麻烦.这里提供一个技巧,通过一个入口可以安装各种插件,基本涵盖了市面上所有靠谱的插件. 准备 Sketch54 Runner ...
- 巧用ELK快速实现网站流量监控可视化
前言 本文可能不会详细记录每一步实现的过程,但一定程度上可以引领小伙伴走向更开阔的视野,串联每个环节,呈现予你不一样的效果. 业务规模 8个平台 100+台服务器 10+个集群分组 微服务600+ 用 ...
- 用nodejs快速实现websocket服务端(带SSL证书生成)
有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...
- 快速构建ceph可视化监控系统-转载
前言 ceph的可视化方案很多,本篇介绍的是比较简单的一种方式,并且对包都进行了二次封装,所以能够在极短的时间内构建出一个可视化的监控系统 本系统组件如下: ceph-jewel版本 ceph_exp ...
随机推荐
- PHP面向对象之抽象类,抽象方法
抽象类,抽象方法 抽象类: 是一个不能实例化的类: 定义形式: abstract class 类名{} 为什么需要抽象类: 它是为了技术管理而设计! 抽象方法: 是一个只有方法头,没有方法体的方法 ...
- excel copy cell & batch operation & checkbox
excel copy cell & batch operation & checkbox excel 右下角,下拉/双击 (复制 cell) 注意: 不是选择列
- 【uoj#21】[UR #1]缩进优化 数学
题目描述 给出 $n$ 个数 ,求 $\text{Min}_{x=1}^{\infty}\sum\limits_{i=1}^n(\lfloor\frac {a_i}x\rfloor+a_i\ \tex ...
- 【bzoj5183】[Baltic2016]Park 离线+对偶图+并查集
题目描述 在Byteland的首都,有一个矩形围栏围起来的公园.在这个公园里树和访客都以一个圆形表示.公园有四个出入口,每个角落一个(1=左下角,2=右下角,3=右上角,4=左上角).访客能通过这些出 ...
- 题解 P5015 【标题统计】
既然这个题这么水 大家不如来盘点一下算法呗 首先说一个事:逗号表达式 这玩意的值是最后一个表达式的值 那么我们就可以愉快的放进循环条件里摩擦 话说这个应该是基础吧,大多数代码都可以这样干 具体可以后面 ...
- 【WPF】GridControl的使用
一.前言 在WPF中我们常常使用DataGrid来显示数据,在Dev中也有一个类似的控件—GridControl. 二.范例 <dxg:GridControl Grid.Row=" I ...
- Linux内核分析6
周子轩 原创作品 转载请注明出处 <Linux内核分析>MOOC课程:http://mooc.study.163.com/course/USTC-1000029000 一.视频笔记 1. ...
- Linux内核分析7
一.理论知识 Linux中,可以从c源代码生产一个可执行程序,这其中要经过预处理.编译和链接的过程.可以参考以下图来理解这个过程: 其中,目标文件中至少有编译后的机器指令代码.数据,也还包括了链接时所 ...
- Hystrix : 解决请求会被拒绝和抛出异常并且fallback不会被调用的问题
启动脚本增加参数:-Dserver.tomcat.max-http-header-size=102400 增大Hystrix,ribbon的各项参数; hystrix: threadpool: def ...
- spark streaming (二)
一.基础核心概念 1.StreamingContext详解 (一) 有两种创建StreamingContext的方式: val conf = new SparkConf().s ...