当前位置:   article > 正文

如何用Rust获取本机CPU、内存在Web网页中显示?_web页面能不能拿到cpu信息

web页面能不能拿到cpu信息

目录

一、需求描述

二、具体操作步骤

三、知识点

1、systemstat

2、Actix 


一、需求描述

需求:

1、需要使用Rust进行后端开发获取本机CPU和内存信息;

2、使用WEB框架发布API;

3、然后使用HTML/CSS/JavaScript进行前端开发,显示结果;

以下是一个简单的示例,展示了如何获取系统信息并使用Actix-Web提供API,然后在前端使用JavaScript来实时刷新数据。

二、具体操作步骤

修改Cargo.toml,添加用到的依赖

  1. [dependencies]
  2. systemstat = "0.2.3"
  3. actix-web = "3.3.2"

PS E:\RustroverProjects> cargo add systemstat
    Updating crates.io index
      Adding systemstat v0.2.3 to dependencies                                                                                                                                     
             Features:
             - serde
             - the_serde
    Updating crates.io index

PS E:\RustroverProjects> cargo add actix-web 
    Blocking waiting for file lock on package cache
    Updating crates.io index
      Adding actix-web v3.3.2 to dependencies                                                                                                                                      
             Features:
             + compress
             - open-ssl
             - openssl
             - rust-tls
             - rustls
             - secure-cookies 
             - secure-cookies
 

 代码如下:

  1. use std::thread;
  2. use std::time::Duration;
  3. use systemstat::{System, Platform, saturating_sub_bytes};
  4. use actix_web::{get, web, App, HttpResponse, HttpServer, Responder};
  5. async fn sys_info() -> String {
  6. let sys = System::new();
  7. let mut cpu_info = String::new();
  8. let mut memory_info = String::new();
  9. match sys.cpu_load_aggregate() {
  10. Ok(cpu)=> {
  11. println!("\nMeasuring CPU load...");
  12. thread::sleep(Duration::from_secs(1));
  13. let cpu = cpu.done().unwrap();
  14. println!("\nCPU load: {}% user, {}% nice, {}% system, {}% intr, {}% idle ",
  15. cpu.user * 100.0, cpu.nice * 100.0, cpu.system * 100.0, cpu.interrupt * 100.0, cpu.idle * 100.0);
  16. cpu_info = format!("\nCPU load: {}% user, {}% nice, {}% system, {}% intr, {}% idle ",cpu.user * 100.0, cpu.nice * 100.0, cpu.system * 100.0, cpu.interrupt * 100.0, cpu.idle * 100.0);
  17. },
  18. Err(x) => println!("\nCPU load: error: {}", x)
  19. }
  20. match sys.memory() {
  21. Ok(mem) => {
  22. println!("\nMemory: {} used / {} ({} bytes) total ({:?})", saturating_sub_bytes(mem.total, mem.free), mem.total, mem.total.as_u64(), mem.platform_memory);
  23. memory_info = format!("\nMemory: {} used / {} ({} bytes) total ({:?})", saturating_sub_bytes(mem.total, mem.free), mem.total, mem.total.as_u64(), mem.platform_memory);
  24. },
  25. Err(x) => println!("\nMemory: error: {}", x)
  26. }
  27. format!("CPU: {}\nMemory: {}", cpu_info,memory_info)
  28. }
  29. #[get("/")]
  30. async fn hello() -> impl Responder {
  31. HttpResponse::Ok().body("Hello world!")
  32. }
  33. #[actix_web::main]
  34. async fn main() -> std::io::Result<()> {
  35. HttpServer::new(|| {
  36. App::new()
  37. .service(hello)
  38. .route("/api", web::get().to(sys_info))
  39. })
  40. .bind(("127.0.0.1", 8080))?
  41. .run()
  42. .await
  43. }

运行结果如下:  

三、知识点

1、systemstat

This library provides a way to access system information such as CPU load, mounted filesystems, network interfaces, etc.

该库提供了一种访问系统信息的方法,如CPU负载、已安装的文件系统、网络接口等。

systemstat - RustThis library provides a way to access system information such as CPU load, mounted filesystems, network interfaces, etc.icon-default.png?t=N7T8https://docs.rs/systemstat/latest/systemstat/index.html

2、Actix 

Actix Web lets you quickly and confidently develop web services in Rust and this guide will get you going in no time.

Actix Web可以让您快速而自信地在Rust中开发Web服务,本指南将很快让您上手。

Getting Started | ActixInstalling Rusticon-default.png?t=N7T8https://actix.rs/docs/getting-started

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/609469
推荐阅读
相关标签
  

闽ICP备14008679号