【发布时间】:2019-11-15 20:45:15
【问题描述】:
我在页面上显示一些数据,即 Sum、Average 和 Total,并希望在使用 SignalR 更改数据后更新它们。大多数示例使用以下方法,在执行创建/更新/删除方法(更改数据)后广播所有客户端:
private void BroadcastDataChange(Data data)
{
Clients.All.dataChanged();
}
但是,我想知道是否有一种更智能的方法可以让我更新数据,即在每个 create-update-delete 方法中定期刷新而不广播(我不使用 SqlDependency 等,而是使用 SignalR)。另一方面,我不确定这种方法是否与 SignalR 逻辑相矛盾。这是我第一次使用 SİgnalR,我很困惑 :( 任何帮助将不胜感激。
【问题讨论】:
-
@Jack 你想做什么? SignalR 存在,因此浏览器不会 必须轮询服务器。否则他们可以只使用定时循环,这将导致数据库加载数据时受到打击,除非它被缓存。总体而言,复杂性增加了,数据库的负载也增加了。
-
@Jack SignalR 是向客户端发送信息的机制。这不是通用轮询、调度或发布/订阅机制。如果要轮询数据库以进行更改,请创建检查更改的计划作业、任务或计时器。找到这些后,可以使用 SignalR 将它们推送到所有客户端
-
@Jack 在这里查看关于 server-api(又名 SignalR Hub)的好文档:docs.microsoft.com/en-us/aspnet/core/signalr/…
-
@jack 客户端 API 是纯 JavaScript,因此它应该可以与 Angular 一起使用,但到目前为止我从未使用过 Angular。我认为 .Net(非核心)使用 SignalR V1 而不是新的 V2。不确定这一点,因为我只有核心。 V1 中的 API 与 V2 非常相似,我猜 V1 的文档仍然在线。您应该能够使 V2 样本适应 V1。
-
@Jack 关于轮询与推送。一般来说,如果您需要快速更新或拥有大量客户端,推送会更有效,因为数据仅在需要时传输。如果您没有很多客户,而且数据并不总是最新的,您也可以每分钟或每几分钟轮询一次。轮询可以使用 SignalR 或普通 AJAX 完成。轮询通常更容易实现,但不能很好地扩展。因此,“这取决于”您的需求,例如“有多少客户”以及“数据必须以多快的速度更新”。
标签: c# asp.net asp.net-mvc asp.net-core signalr