我想在我的ASP.NET MVC5应用程序上监视CPU性能,用户可以选择他们想要监视的PC。 我使用SignalR来监控实时CPU性能。 它适用于第一个CPU,问题是一旦用户选择另一台要监控的PC,将创建另一个根据this link的新任务,以便前任和新任务都将其数据发送到客户端图表。
处理我的问题的解决方案是什么,以便一旦用户更换PC,相应的PC数据将发送到客户端聊天,或者我需要更改我的代码,以便只有第一个当前任务可以继续发送数据。 / p>
我真的很感激任何帮助。
以下是我每次用户选择任何PC时调用的代码:
public class MonitorHub : Hub
{
CancellationTokenSource wtoken;
public MonitorHub()
{
wtoken = new CancellationTokenSource();
}
public void StartCounterCollection(string pcName)
{
var unitOfWork = new CMS.Data.UnitOfWork();
var task = Task.Factory.StartNew(async () =>
{
var perfService = new PerfCounterService();
// await FooAsync(perfService, ref pcName);
while (true)
{
var result = perfService.GetResult(pcName);
Clients.All.newCounter(result);
await Task.Delay(2000, wtoken.Token);
}
}
, wtoken.Token);
}
答案 0 :(得分:2)
您需要使用群组和服务器广播。
客户端:当PC更改时,保留现有PC组“pcName1”并加入选定的PC组“pcName2”。
服务器:首先,尝试使用Working with Groups in SignalR来实施这些组。之后,使用Server Broadcast从服务器广播到每个组:
var clients = GlobalHost.ConnectionManager.GetHubContext<MonitorHub>().Clients;
clients.Group("pcName1").updateValues(values)
为了使用SignalR每隔几秒更新一次图表,您有两种选择:
在 javascript 中使用 SetInterval()来呼叫集线器并每隔几秒钟获取一次值。不要启动任何任务,只需返回值。这样,当客户端断开连接或更改PC时,您不必中止任何正在运行的任务。
来自中心未创建的作业的服务器广播
有用的链接: