基本上我正在编写一个ASP.NET MVC应用程序,虽然javascript每隔30秒发送一次GET请求,但检查数据库中某个表中的某一行是否已更改。
我一直在查看OutputCache属性,但它似乎不起作用,因为它只是缓存内容而不是真正检查是否进行了更新。
这样做“最便宜”的方法是什么?我的意思是服务器负担最少的方式?
答案 0 :(得分:0)
HEAD请求可能更快,但不能保证,但值得研究。
答案 1 :(得分:0)
如果您无法使用某些内容将更改流式传输给您,最便宜的方法是使用带有日期的API,并返回一个布尔标志或一个整数,说明是否发生了更改。基本上它是轮询,这是最小的,因为它是来回的最小响应,如果SignalR或其他一些消息接收过程是不可能的。
答案 2 :(得分:0)
取决于你想要它做什么,你考虑过长时间轮询吗?例如,使用javascript发出GET / POST请求,并允许服务器保留回复,直到您的“事件”发生。
答案 3 :(得分:0)
OutputCache
完美无缺。但它的到期时间应该是你的投票时间的分频器,比如10秒 - 在这种情况下 - 客户端大小为30秒。
我不是EF的专家,但如果您的数据库支持触发器;这是一个选项,您可以将结果缓存更长的时间段(比如说1小时),除非设置了触发器。
但如果您的记录更新速度非常快,那么触发器就会很昂贵。
在这种情况下,我会使用Caching +时间戳机制(如NoSQL数据库中的版本,或Oracle中的时间戳)。
请记住,您每隔30秒就会获取一次记录,而不是记录中的每次更改。这是一件好事,因为它使您的解决方案更加简单。
答案 4 :(得分:0)
可能是SignalR,当数据库发生变化时可以通过推送通知(可以手动或通过SqlDependency跟踪,具体取决于数据库)......
我使用了Wyatt Barnett的建议并且效果很好。
感谢您的回答 - 欣赏它。
是的,我正在回答,因为我无法将他的评论标记为答案。