由于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) akan meningkatkan kandungan dan reka bentuk web melalui elemen baru dan API. 1) H5 meningkatkan penandaan semantik dan sokongan multimedia. 2) Ia memperkenalkan kanvas dan SVG, memperkayakan reka bentuk web. 3) H5 berfungsi dengan memperluaskan fungsi HTML melalui tag baru dan API. 4) Penggunaan asas termasuk membuat grafik menggunakannya, dan penggunaan lanjutan melibatkan WebStorageAPI. 5) Pemaju perlu memberi perhatian kepada keserasian penyemak imbas dan pengoptimuman prestasi.

H5 membawa beberapa fungsi dan keupayaan baru, meningkatkan kecekapan interaktiviti dan pembangunan laman web. 1. Tag semantik seperti meningkatkan SEO. 2. Sokongan multimedia memudahkan main balik audio dan video melalui dan tag. 3. Lukisan kanvas menyediakan alat lukisan grafik dinamik. 4. Penyimpanan Tempatan Memudahkan Penyimpanan Data melalui LocalStorage dan sessionStorage. 5. API Geolokasi memudahkan pembangunan perkhidmatan berasaskan lokasi.

HTML5 membawa lima penambahbaikan utama: 1. Tag semantik meningkatkan kejelasan kod dan kesan SEO; 2. Sokongan multimedia memudahkan penyembuhan video dan audio; 3. Peningkatan Borang Memudahkan Pengesahan; 4. Offline dan storan tempatan meningkatkan pengalaman pengguna; 5. Fungsi kanvas dan grafik meningkatkan visualisasi laman web.

Ciri -ciri teras HTML5 termasuk tag semantik, sokongan multimedia, penyimpanan luar talian dan penyimpanan tempatan, dan peningkatan bentuk. 1. Tag semantik seperti, dan lain -lain untuk meningkatkan kebolehbacaan kod dan kesan SEO. 2. Memudahkan penanaman multimedia dengan label. 3. Storan luar talian dan penyimpanan tempatan seperti ApplicationCache dan LocalStorage Sokongan Operasi Bebas Rangkaian dan Penyimpanan Data. 4. Peningkatan Borang Memperkenalkan Jenis Input dan Sifat Pengesahan Baru Untuk Memudahkan Pemprosesan dan Pengesahan.

H5 menyediakan pelbagai ciri dan fungsi baru, sangat meningkatkan keupayaan pembangunan front-end. 1. Sokongan Multimedia: Media Media Melalui dan Elemen, Tiada Plug-Ins diperlukan. 2. Kanvas: Gunakan elemen untuk menjadikan grafik dan animasi 2D secara dinamik. 3. Penyimpanan Tempatan: Melaksanakan penyimpanan data berterusan melalui LocalStorage dan sessionStorage untuk meningkatkan pengalaman pengguna.

H5 dan HTML5 adalah konsep yang berbeza: HTML5 adalah versi HTML, yang mengandungi unsur -unsur baru dan API; H5 adalah rangka kerja pembangunan aplikasi mudah alih berdasarkan HTML5. HTML5 Parses dan membuat kod melalui pelayar, manakala aplikasi H5 perlu menjalankan bekas dan berinteraksi dengan kod asli melalui JavaScript.

Unsur -unsur utama HTML5 termasuk ,,,,,, dan lain -lain, yang digunakan untuk membina laman web moden. 1. Tentukan kandungan kepala, 2.

Tidak ada perbezaan antara HTML5 dan H5, iaitu singkatan HTML5. 1.HTML5 adalah versi kelima HTML, yang meningkatkan fungsi multimedia dan interaktif laman web. 2.H5 sering digunakan untuk merujuk kepada laman web atau aplikasi mudah alih berasaskan HTML5, dan sesuai untuk pelbagai peranti mudah alih.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft
