【问题标题】:Keep running one task every time Signalr Hub class is called每次调用 Signalr Hub 类时继续运行一项任务
【发布时间】:2016-04-29 07:34:42
【问题描述】:

我想监控我的 ASP.NET MVC5 应用程序的 CPU 性能,用户可以选择他们想要监控的 PC。 我使用 SignalR 来监控实时 CPU 性能。 它适用于第一个 CPU,问题是一旦用户选择另一台 PC 进行监控,将根据this link 创建另一个新任务,以便之前和新任务都将其数据发送到客户端图表。

处理我的问题的解决方案是什么,以便一旦用户更改 PC,相应的 PC 数据就会发送到客户端聊天,或者我可能需要更改我的代码,以便只有第一个当前任务可以继续发送数据。

非常感谢任何帮助。

这是我的代码,每次用户选择任何 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);

    }

【问题讨论】:

  • 你没有包含你引用的链接..
  • 谢谢,我修好了。

标签: asp.net-mvc multithreading signalr task


【解决方案1】:

您需要使用组和服务器广播。

客户端:当PC发生变化时,离开现有的PC组“pcName1”,加入选中的PC组“pcName2”。

服务器:首先,尝试Working with Groups in SignalR 来实现组。之后,使用Server Broadcast 从服务器向每个组广播:

var clients = GlobalHost.ConnectionManager.GetHubContext<MonitorHub>().Clients;
clients.Group("pcName1").updateValues(values)

稍后编辑

Tasks use background threads from the thread pool. Canceling threads using the Abort method is not recommended.

要使用 SignalR 每隔几​​秒更新一次图表,您有两种选择:

  1. 在您的 javascript 中使用 SetInterval() 调用您的集线器并每隔几秒获取一次值。不要启动任何任务,只需返回值。这样,当客户端断开连接或更换 PC 时,您不必中止任何正在运行的任务。

  2. 服务器广播来自一个未在集线器中创建的作业

    • 跟踪连接客户端的组(使用 JoinGroup() 和 LeaveGroup())
    • 在后台作业中,为每个组 (PC) 获取值并将其广播到连接的客户端

有用的链接:

【讨论】:

    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2012-06-23
    • 2014-02-10
    • 2020-10-12
    相关资源
    最近更新 更多