簡體   English   中英

SignalR Core如何每n秒向客戶端發送消息

[英]SignalR Core how to send message to clients every n seconds

又稱為“從后台服務向客戶端發送消息”

我希望SignalR服務器每n秒更新一次儀表板。 我現在正在使用這個:

public class MyHub : Hub
{
    public override Task OnConnectedAsync()
    {
        Observable.Interval(TimeSpan.FromSeconds(0.5)).Subscribe(l =>
        {
            var alt = CalcAltitude(l);
            SendMessage(alt);
        });

        return Task.CompletedTask;
    }

    private void SendMessage(double alt)
    {
        Clients.All.SendAsync("SendAction", new Status() {Altitude = alt});
    }

    private double CalcAltitude(long l)
    {
        return 100 * Math.Sin((double) l / 100) + 200;
    }
}

public class Status
{
    public double Altitude { get; set; }
}

當我的代碼被執行時,它拋出一個異常,說

無法訪問已處置的對象

我懷疑我在這里做錯了。

那么,及時向所有客戶端發送消息的正確方法是什么?

好的,這次的答案不是來自Stack Overflow,而是來自另一個來源。

可以使用ASP.NET Core + SignalR Core中的此代碼完成此操作。

您將需要2個部分。

非常感謝David Fowler的回復!

var hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
hubContext.Clients.All.SendnewData(Data);

將此代碼放在每秒更新或計算數據的位置。

像:您的數據庫過程完成,然后廣播新數據

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Infrastructure;
using Microsoft.AspNet.Mvc;

public class TestController : Controller
{
     private IHubContext testHub;

     public TestController(IConnectionManager connectionManager)
     {
         testHub = connectionManager.GetHubContext<TestHub>();
         testHub.Clients.All.SendnewData(Data);
     }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM