【问题标题】:SignalR Core how to send message to clients every n secondsSignalR Core如何每n秒向客户端发送消息
【发布时间】:2018-09-27 19:38:39
【问题描述】:

又名“从后台服务向客户端发送消息”

我希望我的 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; }
}

当我的代码被执行时,它会抛出一个异常,说明

无法访问已处置的对象

我怀疑我在这里做错了什么。

那么,什么是及时向所有客户端发送消息的正确方法?

【问题讨论】:

  • 设置javascript间隔调用signalR方法

标签: c# .net signalr signalr-hub


【解决方案1】:

好的,这次答案不是来自 Stack Overflow,而是来自另一个来源。

这可以在 ASP.NET Core + SignalR Core 中使用此代码完成。

你需要两部分。

非常感谢David Fowler的回复!

【讨论】:

  • 这感觉不是一个完整的答案,您是否介意用一个有意义且可操作的示例来更新它,而不是链接这些网站(以防将来链接断开)
【解决方案2】:
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);
     }
}

【讨论】:

  • GlobalHost 未找到 :( 您能否发布一个完整的工作示例?谢谢!
  • 添加示例请查看
猜你喜欢
  • 2013-04-16
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多