SignalR MVC 实时刷新

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25027593/article/details/82849899

代码知识个人理解,仅供参考,不保证正确性。

具体逻辑:控制台应用程序连接至Web项目后,模拟发送数据,testData是数据,执行proxy.Invoke("RefreashValue", testData);会进入到步骤3RefreashValue方法,而RefreashValue方法会通知所有客户端Clients.All.PushToClient(newvalue); 并且把数据也发送至客户端,步骤6在监听PushToClient,也获取到了控制台应用程序模拟发送的数据,之后就是用数据自己写业务。

上一篇文章是通过dependency_OnChange(数据库监控表有任何变化会被监听到),这一篇是通过控制台获取数据后实时推送给前台。步骤如下:

1.新建MVC项目

2.右击项目,管理NuGet程序包,搜索SignalR  下载第一个,会自动生成一个Scripts文件夹,里面包含jquery.signalR-2.3.0.min.js类似版本的js文件,后续html页面引用该文件

3.添加新建项->Web->SignalR集线器类(v2),修改代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;

namespace DQCL.Web
{
    public class AppHub : Hub
    {
        public void RefreashValue(string newvalue)
        {
            Clients.All.PushToClient(newvalue);  
        }
    }
}

4.添加新建项->Web->OWIN Startup类,修改代码如下:

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(DQCL.Web.Startup))]

namespace DQCL.Web
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }
}

5.添加cshtml页面,引用步骤2 <script src="~/Scripts/jquery.signalR-2.0.3.min.js"></script> js文件

6.cshtml页面 js监听控制台发送过来的数据,代码如下:

var connection = $.hubConnection();
var proxy = connection.createHubProxy("AppHub");
proxy.on("PushToClient", newvalue => {
    //newvalue 是后台发送的数据,这里写获取数据后的业务
});
connection.start();

上面代码PushToClient 是步骤3里面的,是给所有连接的客户端发送数据。

7.新建控制台应用程序,也要引用SignalR,重复步骤2。右击项目,管理NuGet程序包,搜索SignalR  下载第一个

8.修改控制台应用程序Program.cs,修改代码如下:

static void Main(string[] args)
{

    //连接到MVC项目发布后的地址
    var hubConnection = new HubConnection("http://192.168.199.187:8083/");
    
    //AppHu为步骤3 SignalR集线器类(v2)类名为AppHub
    IHubProxy proxy = hubConnection.CreateHubProxy("AppHub");

    hubConnection.Start().Wait();

    Random rd = new Random();

    //模拟发送数据
    while (true)
    {
        string testData= "监测点" + rd.Next(0, 10) + ":" + rd.Next(10, 100).ToString();
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine(cpuUsage);
        //RefreashValue为步骤3方法名 
        //cpuUsage是发送的数据
        proxy.Invoke("RefreashValue", testData);
        Thread.Sleep(1000);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_25027593/article/details/82849899