实时ASP.NET MVC Web应用程序

时间:2011-03-02 13:01:21

标签: asp.net-mvc real-time

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

我目前通过民意调查来做这件事。我每隔3秒向服务器发送一个ajax请求,要求进行任何新的更改 - 然后返回并处理这些更改。它有效,但我不喜欢它 - 这意味着对于每个浏览器,我将经常发出这些请求,并且服务器将始终忙于处理它们。简而言之,它不能很好地扩展。

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

修改

为了完整性,我正在更新这个以提及我们最终使用的解决方案 - SignalR。它的操作系统来自微软。它越来越受欢迎,我可以衷心地推荐这个,或者我们也看过的WebSync。

5 个答案:

答案 0 :(得分:10)

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

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

应该很好地工作。

答案 1 :(得分:5)

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

Reverse AJAX with IIS/ASP.NET

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

我实际上已经使用了这个,社区版非常特别。非常值得一看,因为这种技术将在未来几个月/几年内开始主导这一领域。 codeplex网站附带了asp.net mvc样本。

答案 2 :(得分:5)

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

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

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

答案 3 :(得分:1)

看看this article

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

答案 4 :(得分:1)

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