技巧之如何快速使用websocket來監控標準輸出
阿新 • • 發佈:2018-12-18
為啥是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)
- 這是標準輸出
[email protected]:~# 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
[email protected]:~# 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>
- 效果圖