如何在ASP.NET中实现实时更新

前端之家收集整理的这篇文章主要介绍了如何在ASP.NET中实现实时更新前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我看过几个网站向您展示数据库中正在发生的事情的实时更新.一个例子可能是

>股票报价网站,实时显示股票价格
>显示“其他用户当前正在搜索内容……”等数据

我假设这将涉及某种轮询机制,每隔几秒查询一次数据库并在网页上呈现它.但是当我从绩效的角度考虑时,这个想法让我感到害怕.

在我正在处理的应用程序中,我需要显示用户已提交的操作的实时状态.用户等待该过程完成.当操作完成时,状态由另一个进程(可以是Windows服务)更新.我应该每秒查询一次数据库获取更新状态吗?

解决方法

它不一定在db中完成.正如你所说的那样昂贵.虽然db可能是一个后备存储,但可能会使用一种更有效的机制来配合轮询操作,例如将实时状态存储在内存中以及最后在db上.您可以比每秒从表中的SELECT状态更有效地轮询内存.

正如我在评论中提到的,在某些情况下,您可以通过动画伪造状态更新的外观来获得很多好处,例如,使用估算,不经常检查数据源.

编辑

(优化使用更少的db资源实时)

不是每个用户轮询数据库以每X秒检查一次作业状态,而是略微改变情况的行为.每次将作业添加数据库时,请读取数据库一次,以将有关所有作业的元数据放入缓存中.因此,内存缓存将反映[user49 … user3,user2,user1,userCurrent] 50个用户的作业(如果每个作业1个). (也许我应该把它写成[job49 … job2,job1,job_current]但同样的想法)

然后,各个用户的网页将轮询始终保持最新的缓存.在此示例中,db仅在缓存中读取50次(每个作业提交一次).如果这50个用户平均等待1分钟进行作业处理并每秒轮询一次状态,则用户群总共轮询缓存50个用户x 60秒= 3000次.

在50分钟的时间内,这是50个数据库读取而不是3000个. (平均每分钟一个.)缓存总是新鲜的,但处理负载.它比考虑每个用户每秒点击数据库要小得多.您可以在缓存中存储其他统计信息和信息,以帮助进行估算等.只要新缓存提供更高的效率,它就是大规模数据库命中的可行替代方案.

注意:通过缓存,我指的是像Application或第三方解决方案这样的全局存储,而不是快速超出范围的ASP.NET页面缓存.使用ASP.NET机制进行缓存可能不适合您的情况.

另一个注意事项:db将知道何时附加另一个作业记录,无论从哪里开始,因此触发器可以初始化缓存更新.

尽管有一个很好的数据库解决方案,但是很多用户经常轮询可能会产生Web服务器连接问题,并且您可能需要在该级别使用不同的解决方案,具体取决于流量.

猜你在找的asp.Net相关文章