SignalR Core 如何每 n 秒向客户端发送消息
SignalR Core how to send message to clients every n seconds
又名 "Send messages to clients from a background service"
我希望我的 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; }
}
当我的代码被执行时,它抛出一个异常说
cannot access a disposed object
我怀疑我这里做错了什么。
那么,怎样才能让消息及时发送到所有客户端呢?
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);
}
}
好的,这次答案不是来自 Stack Overflow,而是来自其他来源。
这可以在 ASP.NET Core + SignalR Core 中使用此代码完成。
您需要 2 个零件。
- 后台服务本身(更新客户端):https://github.com/davidfowl/UT3/blob/fb12e182d42d2a5a902c1979ea0e91b66fe60607/UTT/Scavenger.cs
- 设置(接线)部分:https://github.com/davidfowl/UT3/blob/fb12e182d42d2a5a902c1979ea0e91b66fe60607/UTT/Startup.cs#L46
非常感谢David Fowler的回复!
又名 "Send messages to clients from a background service"
我希望我的 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; }
}
当我的代码被执行时,它抛出一个异常说
cannot access a disposed object
我怀疑我这里做错了什么。
那么,怎样才能让消息及时发送到所有客户端呢?
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);
}
}
好的,这次答案不是来自 Stack Overflow,而是来自其他来源。
这可以在 ASP.NET Core + SignalR Core 中使用此代码完成。
您需要 2 个零件。
- 后台服务本身(更新客户端):https://github.com/davidfowl/UT3/blob/fb12e182d42d2a5a902c1979ea0e91b66fe60607/UTT/Scavenger.cs
- 设置(接线)部分:https://github.com/davidfowl/UT3/blob/fb12e182d42d2a5a902c1979ea0e91b66fe60607/UTT/Startup.cs#L46
非常感谢David Fowler的回复!