代码知识个人理解,仅供参考,不保证正确性。
具体逻辑:控制台应用程序连接至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);
}
}