• NancyFx框架之检测任务管理器


    先建一个空的项目和之前的NancyFx系列一样的步骤

    然后建三个文件夹Models,Module,Views

    然后分别安装一下组件

    • jQuery
    • Microsoft.AspNet.SignalR
    • Microsoft.Owin
    • Nancy
    • Nancy.Owin

    然后往Model类里面添加CPUHub类,Broadcaster类

    CPUHub类

     1  public class CPUHub:Hub
     2     {
     3         private readonly Broadcaster broadcaster;
     4         public CPUHub():this(Broadcaster.broadcaster)
     5         {
     6 
     7         }
     8         public CPUHub(Broadcaster broadcaster)
     9         {
    10             this.broadcaster = broadcaster;
    11         }
    12     }
    View Code

    Broadcaster类

     1  public class Broadcaster
     2     {
     3         private readonly static Lazy<Broadcaster> lazy = new Lazy<Broadcaster>(()=>new Broadcaster(GlobalHost.ConnectionManager.GetHubContext<CPUHub>().Clients));
     4 
     5         private readonly TimeSpan timeSpan = TimeSpan.FromMilliseconds(1000);
     6         private readonly Timer timer;
     7         public static Broadcaster broadcaster
     8         {
     9             get { return lazy.Value; }
    10         }
    11         private IHubConnectionContext hubConnectionContext
    12         {
    13             get;
    14             set;
    15         }
    16         private Broadcaster(IHubConnectionContext hubConnectionContexts)
    17         {
    18             hubConnectionContext = hubConnectionContexts;
    19             timer = new Timer(BroadcastCpuUsage,null,timeSpan,timeSpan);
    20         }
    21         private void BroadcastCpuUsage(object o)
    22         {
    23             string cpu = GetCurrentCpu();
    24 
    25         }
    26         private string GetCurrentCpu()
    27         {
    28             string currentCpu = "";
    29             HttpClient httpClient = new HttpClient();
    30             httpClient.BaseAddress = new Uri("http://localhost:3039");
    31             var response = httpClient.GetAsync("api/cpu").Result;
    32             if (response.IsSuccessStatusCode)
    33             {
    34                 currentCpu = response.Content.ReadAsStringAsync().Result;
    35             }
    36             return currentCpu;
    37         }
    38     }

    然后在往Module里面添加 CPUModule类

     1  public class CPUModule:NancyModule
     2     {
     3         PerformanceCounter performanceCounter;
     4         public CPUModule():base("api/cpu")
     5         {
     6             InitializePerformanceCounter();
     7             Get("/",Lexan=> 
     8             {
     9                 int cpu = (int)Math.Ceiling(performanceCounter.NextValue());
    10                 return Response.AsText(cpu.ToString());
    11             });
    12         }
    13         private void InitializePerformanceCounter()
    14         {
    15             performanceCounter = new PerformanceCounter();
    16             performanceCounter.CategoryName = "";
    17             performanceCounter.CounterName = "";
    18             performanceCounter.InstanceName = "";
    19             performanceCounter.NextValue();
    20             Thread.Sleep(1000);
    21         }
    22     }

    然后添加index.html页面在根目录下

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <title>NancyTaskManager</title>
     5 </head>
     6 <body>
     7     <label id="lblVal"></label>
     8     <br />
     9     <canvas id="cvPercentage"></canvas>
    10     <br />
    11     <br />
    12     <canvas id="cvGraph" height="450" width="600"></canvas>
    13     <script src="Scripts/jquery-2.1.0.js"></script>
    14     <script src="Scripts/jquery.signalR-2.0.2.js"></script>
    15     <script src="Scripts/Chart.js"></script>
    16     <script src="/signalr/hubs"></script>
    17     <script src="Scripts/taskManager.js"></script>
    18 </body>
    19 </html>

    继续往根目录里面添加Startup类

     1 [assembly:OwinStartup(typeof( NancyFxTaskManager.Startup))]
     2 namespace NancyFxTaskManager
     3 {
     4     public class Startup
     5     {
     6         public void Configuration(IAppBuilder app)
     7         {
     8             app.MapSignalR().UseNancy();
     9             
    10         }
    11     }
    12 }

    好了我们准备就绪,看看运行效果

    感谢各位dalao的观看,如有不是,多多指教

  • 相关阅读:
    一文搞定String、StringBuffer、StringBulider(含使用方法,三者对比)
    Linux C/C++编程之(十一)gdb调试
    Linux C/C++编程之(十)动态库的制作和使用
    《java入门第一季》之面向对象接口面试题
    《java入门第一季》之面向对象(谈谈接口)
    《java入门第一季》之面向对象(抽象类其实不抽象)
    《java入门第一季》之面向对象(抽象类到底多抽象)
    《java入门第一季》之面向对象多态面试题(多态收尾)
    《java入门第一季》之面向对象(多态练习)
    《java入门第一季》之面向对象(多态向下转型)
  • 原文地址:https://www.cnblogs.com/R00R/p/7733037.html
Copyright © 2020-2023  润新知