pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

HTML5-WebSocket實現對服務器CPU實時監控

下面通過服務端獲取當前CPU的使用情況主動發送給網頁,讓網頁實時顯示CPU使用情況的曲線圖,該事例的主要功能是包括服務端獲取CPU使和情況和HTML5使用canvas進行曲線圖繪制. ...,HTM

由于WebSocket允許保持長連接,因此當建立連接后服務器可以主動地向Client發送相關信息.下面通過服務端獲取當前CPU的使用情況主動發送給網頁,讓網頁實時顯示CPU使用情況的曲線圖.該事例的主要功能是包括服務端獲取CPU使和情況和HTML5使用canvas進行曲線圖繪制.


應用效果



實現效果主要是模仿windows的任務管理器,顯示每個核的工作情況.


C#獲取CPU使用情況


可能通過PerformanceCounter來獲取具本CPU線程的使用情況,不過在構建PerformanceCounter前先獲取到CPU對應的線程數量.獲取這個數量可以通過Environment.ProcessorCount屬性獲取,然后遍歷構建每個PerformanceCounter


1
2
3
4
5
int coreCount = Environment.ProcessorCount;        
            for (int i = 0; i < coreCount; i++)
            {
                mCounters.Add(new PerformanceCounter("Processor", "% Processor Time", i.ToString()));
            }


為了方便計數器的處理,簡單地封裝了一個基礎類,完整代碼如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/// <summary>
    /// Copyright ? henryfan 2012        
    ///Email:   henryfan@msn.com    
    ///HomePage:    http://www.ikende.com       
    ///CreateTime:  2012/12/24 15:10:44
    /// </summary>
    public class ProcessorCounter
    {
        private List<PerformanceCounter> mCounters = new List<PerformanceCounter>();
        public IList<PerformanceCounter> Counters
        {
            get
            {
                return mCounters;
            }
        }
        public void Open()
        {
            int coreCount = Environment.ProcessorCount;        
            for (int i = 0; i < coreCount; i++)
            {
                mCounters.Add(new PerformanceCounter("Processor", "% Processor Time", i.ToString()));
            }
        }
        public ItemUsage[] GetValues()
        {
            ItemUsage[] values = new ItemUsage[mCounters.Count];
            for (int i = 0; i < mCounters.Count; i++)
            {
                values[i] = new ItemUsage();
                values[i].ID = i.ToString();
                values[i].Name = "CPU " +i.ToString();
                values[i].Percent =  mCounters[i].NextValue();
            }
            return values;
        }
    }
    public class ItemUsage
    {
        public string Name { get; set; }
        public float Percent { get; set; }
        public  string ID { get; set; }
    }


這樣一個用于統計CPU所有線程使用情況計數的類就完成了.


頁面繪制處理


首先定義一些簡單的處理結構


1
2
3
4
5
6
7
8
9
10
11
function ProcessorInfo() {
            this.Item = null;
            this.Points = new Array();
            for (var i = 0; i < 50; i++) {
                this.Points.push(new Point(0, 0));
            }
        }
        function Point(x, y) {
            this.X = x;
            this.Y = y;
        }


主要定義線程信息結構,默認初始化50個座標,當在接收服務線程使用情況的時候,構建一個點添加到數組件尾部同時把第一個移走.通過定時繪制這50個點的曲線這樣一個動態的走勢就可以完成了.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function drawProceessor(item) {
            var canvas = document.getElementById('processimg' + item.Item.ID);
            var context = canvas.getContext('2d');
            context.beginPath();
            context.rect(0, 0, 200, 110);
            context.fillStyle = 'black';
            context.fill();
            context.lineWidth = 2;
            context.strokeStyle = 'white';
            context.stroke();
            context.beginPath();
            context.moveTo(2, 106);
            for (var i = 0; i < item.Points.length; i++) {
  
                context.lineTo(4 * i + 2, 110 - item.Points[i].Y - 4);
            }
            context.lineTo(200, 106);
            context.closePath();
            context.lineWidth = 1;
            context.fillStyle = '#7FFF00';
            context.fill();
            context.strokeStyle = '#7CFC00';
            context.stroke();
            context.font = '12pt Calibri';
            context.fillStyle = 'white';
            context.fillText(item.Item.Name, 60, 20);
        }
        function addUploadItem(info) {
            if (cpus[info.ID] == null) {
                var pinfo = new ProcessorInfo();
                pinfo.Item = info;
                $('<canvas id="processimg' + info.ID + '" width="200" height="110"></canvas>').appendTo($('#lstProcessors'));
                cpus[info.ID] = pinfo;
                processors.push(pinfo);
                pinfo.Points.shift();
                pinfo.Points.push(new Point(0, info.Percent));
                drawProceessor(pinfo);
  
            } else {
                var pinfo = cpus[info.ID];
                pinfo.Points.shift();
                pinfo.Points.push(new Point(0, info.Percent));
            }
        }


只需要通過定時器來不停地更新線程使用繪制即可.


1
2
3
4
5
setInterval(function () {
                for (var i = 0; i < processors.length; i++) {
                    drawProceessor(processors[i]);
                }
            }, 1000);


服務端


對于服務端其實可以根據自己的需要來使用websocket協議實現,.net 4.5也提供相應的封裝.而這里則使用了beetle對應websocket的擴展協議包,整體代碼如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Program : WebSocketJsonServer
    {
        static void Main(string[] args)
        {
            TcpUtils.Setup("beetle");
            Program server = new Program();
            server.Open(8070);
            Console.WriteLine("websocket start@8070");
            ProcessorCounter counters = new ProcessorCounter();
            counters.Open();
            while (true)
            {
                ItemUsage[] items = counters.GetValues();
                foreach (ItemUsage item in items)
                {
                    Console.WriteLine("{0}:{1}%", item.Name, item.Percent);
                }
                JsonMessage message = new JsonMessage();
                message.type = "cpu useage";
                message.data = items;
                foreach (TcpChannel channel in server.Server.GetOnlines())
                {
                    channel.Send(message);
                }
                System.Threading.Thread.Sleep(995);
            }
            System.Threading.Thread.Sleep(-1);
        }
        protected override void OnError(object sender, ChannelErrorEventArgs e)
        {
            base.OnError(sender, e);
            Console.WriteLine(e.Exception.Message);
        }
        protected override void OnConnected(object sender, ChannelEventArgs e)
        {
            base.OnConnected(sender, e);
            Console.WriteLine("{0} connected", e.Channel.EndPoint);
        }
        protected override void OnDisposed(object sender, ChannelDisposedEventArgs e)
        {
            base.OnDisposed(sender, e);
            Console.WriteLine("{0} disposed", e.Channel.EndPoint);
            
        }
    }

每秒獲取一次CPU的使用情況,并把信息以json的方式發送給當前所有在線的連接.

下載

完整代碼:ProcessorsMonitor.rar (686.02 kb) 

演示地址:http://html5.ikende.com/ProcessorsMonitor.htm (瀏覽器使用chrome或IE10)


via:http://www.cnblogs.com/smark/archive/2012/12/25/2833129.html



【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

由于實際運行環境是在瀏覽器中,因此性能還取決于JavaScript解釋器的效率,指定的FPS幀速在低性能解釋器中可能不會達到,所以這部分不是開發者能夠決定的,開發者能作的是盡可能通
本文將使用HTML5提供的VideoAPI做一個自定義的視頻播放器,需要用到HTML5提供的video標簽、以及HTML5提供的對JavascriptAPI的擴展。,HTML5中國,中國最大的HTML5中文門戶。
隨著 Hybrid 應用的豐富,HTML5 工程師們已經不滿足于把桌面端體驗簡單移植到移動端,他們覬覦移動原生應用人性化的操作體驗,特別是原生應用與生俱來的豐富的手勢系統。HTML5 沒有提
你想要在自己網站上分享一個產品,或者是一個作品集,又或者僅僅只是一個靈感。在你發布到網上之前,你想讓它看起來有吸引力,專業,或者至少得看起來像那么回事。那么你接下
H5廣告,包括H5廣告的設計流程,究竟有什么講究,和階段。為了能幫助更多的人了解H5廣告,我專門做了一個講義。同時,也讓我意外的收到了非常好反饋和認!這是對我的極大鼓勵!我的
本文主要內容有:框架與組件、構建生態、開發技巧與調試、html、css與重構、native/hybrid/桌面開發、前端/H5優化、全棧/全端開發、研究實驗、數據分析與監控、其它軟技能、前端技術網
主站蜘蛛池模板: 天津热油泵_管道泵_天津高温热油泵-天津市金丰泰机械泵业有限公司【官方网站】 | 废水处理-废气处理-工业废水处理-工业废气处理工程-深圳丰绿环保废气处理公司 | 一礼通 (www.yilitong.com)-企业礼品解决方案一站式服务平台 | 烟气在线监测系统_烟气在线监测仪_扬尘检测仪_空气质量监测站「山东风途物联网」 | 香港新时代国际美容美发化妆美甲培训学校-26年培训经验,值得信赖! | 鹤壁创新仪器公司-全自动量热仪,定硫仪,煤炭测硫仪,灰熔点测定仪,快速自动测氢仪,工业分析仪,煤质化验仪器 | 代办建筑资质升级-建筑资质延期就找上海国信启航 | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 世纪豪门官网 世纪豪门集成吊顶加盟电话 世纪豪门售后电话 | 散热器厂家_暖气片_米德尔顿散热器 | 粤丰硕水性环氧地坪漆-防静电自流平厂家-环保地坪涂料代理 | 真空包装机-诸城市坤泰食品机械有限公司 | 陕西视频监控,智能安防监控,安防系统-西安鑫安5A安防工程公司 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 慢回弹测试仪-落球回弹测试仪-北京冠测精电仪器设备有限公司 | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 薄壁轴承-等截面薄壁轴承生产厂家-洛阳薄壁精密轴承有限公司 | 变色龙PPT-国内原创PPT模板交易平台 - PPT贰零 - 西安聚讯网络科技有限公司 | 深圳律师咨询_深圳律师事务所_华荣【免费在线法律咨询】网 | 移动厕所租赁|移动卫生间|上海移动厕所租赁-家瑞租赁 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 保镖公司-私人保镖-深圳保镖公司【环宇兄弟保镖】 | 广东佛电电器有限公司|防雷开关|故障电弧断路器|智能量测断路器 广东西屋电气有限公司-广东西屋电气有限公司 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 微波萃取合成仪-电热消解器价格-北京安合美诚科学仪器有限公司 | 14米地磅厂家价价格,150吨地磅厂家价格-百科 | 移动厕所租赁|移动卫生间|上海移动厕所租赁-家瑞租赁 | 四川成都干燥设备_回转筒干燥机_脉冲除尘器_输送设备_热风炉_成都川工星科机电设备有限公司 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 无味渗透剂,泡沫抑尘剂,烷基糖苷-威海威能化工有限公司 | 特种阀门-调节阀门-高温熔盐阀-镍合金截止阀-钛阀门-高温阀门-高性能蝶阀-蒙乃尔合金阀门-福建捷斯特阀门制造有限公司 | 一体化预制泵站-一体化提升泵站-一体化泵站厂家-山东康威环保 | 电脑刺绣_绣花厂家_绣花章仔_织唛厂家-[源欣刺绣]潮牌刺绣打版定制绣花加工厂家 | 上海赞永| 广州印刷厂_广州彩印厂-广州艺彩印务有限公司 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 中药二氧化硫测定仪,食品二氧化硫测定仪|俊腾百科 | 内六角扳手「厂家」-温州市威豪五金工具有限公司 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 塑料检查井_双扣聚氯乙烯增强管_双壁波纹管-河南中盈塑料制品有限公司 | 岸电电源-60HZ变频电源-大功率变频电源-济南诚雅电子科技有限公司 |