【问题标题】:SignalR Hub broadcasting from custom function triggered by Hub method从 Hub 方法触发的自定义函数的 SignalR Hub 广播
【发布时间】:2019-06-19 14:40:33
【问题描述】:

在这种情况下,如何运行 SignalR Hub 以实现长时间运行的进程?我想将数据从异步 IoT 中心接收器广播到连接到集线器的所有客户端,但我只想让 1 个线程运行并发送数据(物联网中心限制 5 个侦听器)。

除了在用户连接和断开连接时偶尔出现“Hub 已处理”异常(客户端编号从 1 更改为 0 或 0 更改为 1 - 即线程启动和停止时会发生错误)之外,此代码可以正常工作并且做得很好)

    public override Task OnDisconnectedAsync(Exception exception)
    {
        if (UserHandler.ConnectedIds.Count)
        {
            UserHandler.Remove(Context.ConnectionId);
            numberOfUsers = UserHandler.ConnectedIds.Count;
        }
        else
        {
            UserHandler.Remove(Context.ConnectionId);
        }
        return base.OnDisconnectedAsync(exception);
    }

    public override Task OnConnectedAsync()
    {
        UserHandler.ConnectedIds.Add(UserHandler.Create(Context.ConnectionId, "connectionString"));
        System.Diagnostics.Trace.WriteLine("User connected!");
        return base.OnConnectedAsync();
    }

    public void Send()
    {
        if (UserHandler.ConnectedIds.Count==1)
        {
            thread = new Thread(() => SendMessage());
            thread.Start();
        }
    }

    public void SendMessage()
    {
        while (UserHandler.ConnectedIds.Count > 0)
        {
            Task<string> getData = recieveFromDevice.ReceiveMessagesFromDeviceAsync(eventHubReceiver, "3");
            var receivedList = JsonConvert.DeserializeObject<List<Variable>>(getData.Result);
                if (UserHandler.ConnectedIds.Count != 0)
                {
                    Clients.All.SendAsync("Send", receivedList);
                }
            }
        }
    }

我已阅读有关使用 Hub 上下文的文档,但是当我从 Hub 方法启动线程时,我不确定如何在此处执行此操作。有没有更好的方法来做到这一点?

【问题讨论】:

标签: c# multithreading asp.net-core signalr signalr-hub


【解决方案1】:

查看 StockTicker 应用程序后,我能够通过创建额外的类来解决我的问题,该类处理长时间运行的进程(将数据从 IoT 中心广播到所有连接的客户端)。如果有人遇到这样的问题,我将发布编辑过的代码。 谢谢@Glen Ferrie

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 2022-06-15
    相关资源
    最近更新 更多