在Asp.net MVC应用程序中将信息传递给没有页面刷新的客户端

时间:2013-08-25 06:54:25

标签: c# asp.net-mvc asynchronous real-time

今天我们看到一些网站在没有页面刷新的情况下将数据或通知传递给客户端。命名为实时或交互式应用程序。

一些已知的网站是:

  1. Stackoverflow:通知
  2. Freelancer:以数字格式异步传递项目和专业计数
  3. Google Mail:计算用户的邮件使用量。
  4. 等等......

    我尝试过搜索SignalR等工具。基本上SignalR专为创建聊天应用程序而设计。但是,如果没有Microsoft Technologies的任何扩展来实现我们的目的,是否存在直接的方式?例如,假设我们想要一个像freelancer这样的简单计数器,除了使用像SignalR这样的扩展名外,我们没办法吗?

3 个答案:

答案 0 :(得分:3)

您可以查看一种称为轮询的技术(当不存在对其他方法的支持时,SignalR会回落),基本上概念是每隔x秒向服务器发送一个请求以进行检查更新(或多或少),例如(使用jQuery):

setInterval(function() {
    $.get("/Messages/GetCount", function(data) {
        // do something with the data ...
    });
}, 30000);

每30秒检查一次消息计数 - 并相应地执行操作。 Here是关于轮询和长轮询的好文章(它提到了一个名为Socket.IO的SignalR替代方案)。

说了这么多,我认真地选择了SignalR,那些人测试了各种角落案例,表演等。

答案 1 :(得分:1)

在客户端使用Javascript计时器对更新的信息进行定期异步请求。然后,可以使用此更新的信息更新客户端,或者可以用于提示进一步请求更多详细信息。

此解决方案适用于服务器端有可用更新时不需要立即更新的情况(但可以等待计时器间隔)。它还可能会出现一些扩展问题,并可能导致浪费带宽和客户端/服务器时间,同时进行不必要的调用。

要克服其中任何一个,最好使用像SignalR这样的库(它可以做的不仅仅是聊天应用程序 - 请查看this blog post以查找与聊天无关的真实世界实现) 。

答案 2 :(得分:0)

使用Microsoft的ASP.NET Ajax实现或JQuery:

Microsoft Ajax Overview