使用SignalR始终将数据从服务器推送到客户端

时间:2014-06-18 08:33:21

标签: asp.net signalr signalr-hub

我正在开发一个Web应用程序,我有一些图表,我希望始终从数据库中获取图表的数据,以便用户始终拥有最新的数据图片。我使用signalR并在Report页面的页面加载中调用hub类中的服务器方法,该方法从数据库获取图表数据并将其传递到客户端,然后客户端的处理程序处理数据并绘制图表。我想要的是不断获取数据。我有什么选择呢?

在一分钟的修复间隔之后继续调用hub方法的最佳方法是什么?

2 个答案:

答案 0 :(得分:5)

我不会在客户端或服务器上进行轮询。而是使用服务总线并在发生时在该总线上发布更改。

然后,您可以使用SignalR将这些事件转发给客户端。我已经建立了一个名为SignalR.EventAggregatorProxy

的库

https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki

我在这里写了一篇关于它的博客文章 http://andersmalmgren.com/2014/05/27/client-server-event-aggregation-with-signalr/

您还可以查看演示 https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/tree/master/SignalR.EventAggregatorProxy.Demo.MVC4

或者在这里观看现场演示 http://malmgrens.org/signalr/

答案 1 :(得分:4)

SignalR使服务器的轮询过时。您要做的是安排数据库访问。如果要每分钟更新一次图表,请在服务器应用程序中创建一个计时器作业,从中收集数据库中的数据,该数据已在最后一分钟内添加。然后将此数据发送给您的客户。通过这种方式,您连接的客户端始终是最新的,无需轮询服务器。