WebSocket入门教程(三)-- WebSocket实例:实时获取服务器内存使用情况
websocket,教学,源码2016-06-09
转载请标明出处:http://blog.csdn.net/u010136741/article/details/51581298, 本文出自: 柳木木_kylin
<!DOCTYPE html> <html lang="en"> <head> <title>WebSocket入门教程(三)-- WebSocket实例:实时获取服务器内存使用情况</title> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/4.0.0-alpha.2/css/bootstrap.css"> <link rel="stylesheet" href="http://cdn.bootcss.com/tether/1.3.2/css/tether.css"/> <script src="http://cdn.bootcss.com/jquery/2.2.4/jquery.js" ></script> <script src="http://cdn.bootcss.com/tether/1.3.2/js/tether.js"></script> <script src="http://cdn.bootcss.com/bootstrap/4.0.0-alpha.2/js/bootstrap.js"></script> <script> // code from chapter goes here $(function() { //alert("xxx"); var ws = new WebSocket("ws://www.liumumu.top:8181"); var mem = {"total": 0, "used": 0, "free": 0, "buffers": 0, "cached": 0}; ws.onopen = function(e){ console.log("Connection established"); }; var changeMemEntry = function(field,originalValue,newValue){ var valElem = $('#' + field + ' span'); valElem.html(newValue); if(originalValue == 0){ return; } if(field =="free"){ if(newValue < originalValue){ valElem.addClass('label-danger'); valElem.removeClass('label-success'); }else if(newValue>originalValue){ valElem.addClass('label-success'); valElem.removeClass('label-danger'); } }else{ if(newValue > originalValue){ valElem.addClass('label-danger'); valElem.removeClass('label-success'); }else if(newValue<originalValue){ valElem.addClass('label-success'); valElem.removeClass('label-danger'); } } } ws.onmessage = function(e){ var memData = JSON.parse(e.data); //console.log("onmessage",memData); for(var field in memData){ if(memData.hasOwnProperty(field)){ changeMemEntry(field,mem[field],memData[field]); mem[field] = memData[field]; } } } ws.onerror = function(e){ console.log("WebSocket failure,error",e); //handleErrors(e); } ws.onclose = function(e){ console.log(e); console.log(e.reason+" "+e.code); for(var field in mem){ if(mem.hasOwnProperty(field)){ mem[field] = 0; } } } }); </script> <style> html,body{ height:100%; } </style> </head> <body lang="cn"> <div class="vertical-center"> <div class="container"> <h1 style="text-align:center;padding:5px;">柳木木ECS概况</h1> <table class="table" id="memTable"> <thead> <tr> <th>类型</th> <th>大小(KB)</th> </tr> </thead> <tbody id="memRows"> <tr> <td><h3>内存总量</h3></td> <td id="total"> <h3><span class="label label-default label-success">0.00</span></h3> </td> </tr> <tr> <td><h3>已使用内存</h3></td> <td id="used"> <h3><span class="label label-default label-success">0.00</span></h3> </td> </tr> <tr> <td><h3>闲置内存</h3></td> <td id="free"> <h3><span class="label label-default label-success">0.00</span></h3> </td> </tr> <tr> <td><h3>写缓存</h3></td> <td id="buffers"> <h3><span class="label label-default label-success">0.00</span></h3> </td> </tr> <tr> <td><h3>读缓存</h3></td> <td id="cached"> <h3><span class="label label-default label-success">0.00</span></h3> </td> </tr> </tbody> </table> </div> </div> </body> </html>
//send memory info per seconds var WebSocketServer = require('ws').Server, wss = new WebSocketServer({port:8181}); var spawn = require('child_process').spawn; function sendMemInfo(ws){ var free = spawn('free',['-k']); free.stdout.on('data',function(data){ var strdata = ""+data; //console.log(strdata); //正则匹配,获取数据 var re = /Mem: *(\d*) *(\d*) *(\d*) *(\d*) *(\d*) *(\d*)/; var result = strdata.match(re); var mem = {}; if(result.length>0){ mem["total"] = parseInt(result[1]); mem["used"] = parseInt(result[2]); mem["free"] = parseInt(result[3]); //mem["shared"] = parseInt(result[4]); mem["buffers"] = parseInt(result[5]); mem["cached"] = parseInt(result[6]); ws.send(JSON.stringify(mem)); } }); } wss.on('connection',function(ws){ var clientMemUpdater; var sendMemUpdates = function(ws){ if(ws.readyState == 1){ sendMemInfo(ws); } } clientMemUpdater = setInterval(function(){ sendMemUpdates(ws); },1000); var clientStocks = []; sendMemUpdates(ws); ws.on("close",function(){ if(typeof clientMemUpdater != 'undefined'){ clearInterval(clientMemUpdater); } }); });