由于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
{
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> </summary> /// Copyright © henryfan 2012
///Email: henryfan@msn.com
///HomePage: <a href="http://www.ikende.com%20%20%20%20%20%20%20/">http://www.ikende.com </a>
///CreateTime: 2012/12/24 15:10:44
///
public
class ProcessorCounter
{
private
List<performancecounter> mCounters = </performancecounter> new
List<performancecounter>(); </performancecounter>
public
IList<performancecounter> Counters </performancecounter>
{
get
{
return
mCounters;
}
}
public
void Open()
{
int
coreCount = Environment.ProcessorCount;
for
( int i = 0; i
{
mCounters.Add( new
PerformanceCounter( "Processor" , "% Processor Time" , i.ToString()));
}
}
public
ItemUsage[] GetValues()
{
ItemUsage[] values = new
ItemUsage[mCounters.Count];
for
( int i = 0; 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
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
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'
'" width="200" height="110">' ).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
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

H5(HTML5)将通过新元素和API提升网页内容和设计。1)H5增强了语义化标记和多媒体支持。2)它引入了Canvas和SVG,丰富了网页设计。3)H5的工作原理是通过新标签和API扩展HTML功能。4)基本用法包括使用创建图形,高级用法涉及WebStorageAPI。5)开发者需注意浏览器兼容性和性能优化。

H5带来了多项新功能和能力,极大提升了网页的互动性和开发效率。1.语义化标签如、增强了SEO。2.多媒体支持通过和标签简化了音视频播放。3.Canvas绘图提供了动态图形绘制工具。4.本地存储通过localStorage和sessionStorage简化了数据存储。5.地理位置API便于开发基于位置的服务。

HTML5带来了五个关键改进:1.语义化标签提升了代码清晰度和SEO效果;2.多媒体支持简化了视频和音频嵌入;3.表单增强简化了验证;4.离线与本地存储提高了用户体验;5.画布与图形功能增强了网页的可视化效果。

HTML5的核心特性包括语义化标签、多媒体支持、离线存储与本地存储、表单增强。1.语义化标签如、等,提升代码可读性和SEO效果。2.和标签简化多媒体嵌入。3.离线存储和本地存储如ApplicationCache和LocalStorage,支持无网络运行和数据存储。4.表单增强引入新输入类型和验证属性,简化处理和验证。

H5提供了多种新特性和功能,极大地增强了前端开发的能力。1.多媒体支持:通过和元素嵌入媒体,无需插件。2.画布(Canvas):使用元素动态渲染2D图形和动画。3.本地存储:通过localStorage和sessionStorage实现数据持久化存储,提升用户体验。

H5和HTML5是不同的概念:HTML5是HTML的一个版本,包含新元素和API;H5是基于HTML5的移动应用开发框架。HTML5通过浏览器解析和渲染代码,H5应用则需要容器运行并通过JavaScript与原生代码交互。

HTML5的关键元素包括、、、、、等,用于构建现代网页。1.定义头部内容,2.用于导航链接,3.表示独立文章内容,4.组织页面内容,5.展示侧边栏内容,6.定义页脚,这些元素增强了网页的结构和功能性。

HTML5和H5没有区别,H5是HTML5的简称。1.HTML5是HTML的第五个版本,增强了网页的多媒体和交互功能。2.H5常用于指代基于HTML5的移动网页或应用,适用于各种移动设备。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3汉化版
中文版,非常好用

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)