实时 ASP.NET MVC Web 应用程序

Posted

技术标签:

【中文标题】实时 ASP.NET MVC Web 应用程序【英文标题】:Real-time ASP.NET MVC Web Application 【发布时间】:2011-03-02 13:01:20 【问题描述】:

我需要在我的网络应用程序中添加一个“实时”元素。基本上,我需要检测存储在 SQL Server 表中的“更改”,并在发生更改时更新 UI 的各个部分。

我目前正在通过投票进行此操作。我每 3 秒向服务器发送一个 ajax 请求,请求任何新的更改 - 然后返回并处理这些更改。它可以工作,但我不喜欢它——这意味着对于每个浏览器,我都会频繁地发出这些请求,而服务器总是忙于处理它们。简而言之,它不能很好地扩展。

是否有任何巧妙的替代方案可以避免轮询开销?

编辑

为了完整起见,我将更新此内容以提及我们最终采用的解决方案 - SignalR。它是操作系统,来自微软。它越来越受欢迎,我可以衷心推荐它,或者确实是我们也看过的 WebSync。

【问题讨论】:

***.com/questions/4555462/… 【参考方案1】:

查看WebSync,这是一款专为 ASP.NET/IIS 设计的彗星服务器。

特别是,我会使用SQL Dependency 类,当您检测到更改时,使用RequestHandler.Publish("/channel", data); 将信息发送给适当的监听客户端。

应该很好用。

【讨论】:

公平地说,它非常棒(WebSync)。演示(尤其是地图之一 - 您需要为此打开 2 个浏览器窗口)非常简单但很有启发性 WebSync 看起来确实很酷,但理想情况下我想要一个免费的解决方案(或者更确切地说,客户想要一个免费的解决方案!)。 呵呵,够公平的 Jakub ;)。对于任何想知道他在说什么的人 - 我是 WebSync 的开发人员之一,受雇于 Frozen Mountain :)。不想在这里隐藏任何东西。 @Matt - 他们不总是这样吗? :) 问题是,什么是“免费的”——你的时间来实施,而不是购买现有的解决方案……似乎我一天要进行多次对话。但是,这可能是另一个地方的问题:-D 再看这个,我印象不错,正在等待老板关于购买可能性的回复:)【参考方案2】:

直接取自 Jakub 引用的链接(即):

Reverse AJAX with IIS/ASP.NET

PokeIn on codeplex 为您提供增强的 JSON 功能,使您的服务器端对象在客户端可用。简单地说,它是一个反向 Ajax 库,可以轻松地从 C#/VB.NET 调用 javascript 函数并从 JavaScript 调用 C#/VB.NET 函数。它具有许多功能,如事件排序、资源管理、异常处理、编组、Ajax 上传控制、单声道兼容性、WCF 和 .NET 远程集成和可扩展的服务器推送。 此库有一个免费的社区许可选项,与其他许可选项相比,该许可选项非常划算。

我实际使用过这个,社区版非常特别。非常值得一看,因为这种技术将在未来几个月/几年内开始主导市场。 codeplex 站点带有完整的 asp.net mvc 示例。

【讨论】:

jakub - 真奇怪,我实际上在 10 分钟前访问了该链接 - 感谢您的提醒。已更改为直接 codeplex 项目链接【参考方案3】:

无论如何:您将始终受限于 HTTP (大部分)是一条单行道这一事实。除非您在客户端上实现一些合理的代码(即侦听传入的网络请求),否则其他任何事情都将涉及轮询服务器以获取更新,无论其他人会告诉您什么。

我们有类似的要求:在我们的一个实时 Web 应用程序中具有非常快的响应时间,每台 Web 服务器为大约 400 到 500 个客户端提供服务。服务器需要几乎在 0.1 秒内通知客户端(电话和 VoIP)。

最后我们实现了Async Handler。在每个轮询请求上,我们将请求休眠 5 秒,等待信号量脉冲信号响应客户端。如果 5 秒结束,我们会以“无事件”响应,客户端将再次(立即)发布请求。这导致了非常快的响应时间,而且我们从来没有遇到过每台机器多达 500 个客户端的任何问题。不知道在轮询请求可能会产生问题之前我们还可以添加多少。

【讨论】:

这几乎就是我所做的。您最终会得到一个队列,您可以根据需要轮询并下拉事件。我很确定事实上这就是堆栈溢出的工作原理以及页面顶部“toast”的工作原理。 这听起来像是一个非常好的常识方法来解决无法确定的 ping .. 喜欢它 +1【参考方案4】:

看看this article

我在某处(不记得在哪里)读到使用此 WCF 功能使主机进程以不消耗阻塞线程的方式处理请求。

【讨论】:

【参考方案5】:

根据您的应用程序的限制,您可以使用 Silverlight 进行此连接。您不需要为 Silverlight 提供任何 UI,但您可以使用具有接受服务器端数据推送的连接的套接字。

【讨论】:

以上是关于实时 ASP.NET MVC Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

SignalR在ASP.NET MVC中的应用

如何在 ASP.NET Core MVC 中请求和显示实时 Web api 数据?

ASP.NET MVC 在“发布”上应用 web.config 转换

有没有办法让 Asp.net 零公共站点(Asp.net MVC)中的实时登录用户?

如何在使用 HttpClient 使用 Asp Net Web Api 的 Asp Net Mvc 中提供实时数据?

如何使用 ASP.NET MVC 应用程序在 firebase 实时数据库中设置数据