我有一个网页,一旦数据库中的值发生变化,就需要立即刷新该网页。我看到很多反向 AJAX 功能可以让会话保持运行。
我的主要问题是,你认为我应该使用什么?
我的另一个问题是......我不能在javascript中做一个无限循环,然后调用一个检查数据库的webmethod吗?为什么我需要彗星套接字或网络服务或类似的东西?
我有一个网页,一旦数据库中的值发生变化,就需要立即刷新该网页。我看到很多反向 AJAX 功能可以让会话保持运行。
我的主要问题是,你认为我应该使用什么?
我的另一个问题是......我不能在javascript中做一个无限循环,然后调用一个检查数据库的webmethod吗?为什么我需要彗星套接字或网络服务或类似的东西?
老式的解决方案是实现一个“心跳”,每 15 秒左右(这可以明显改变)发出一个轻量级 AJAX“HEAD”请求,服务器端控制器会在回复标头中指出存在是要接收的内容。
然后,应用程序可以再次请求更多数据。请注意,您可以在一个请求中执行此操作,而且效果也很好 - 特别是如果您的数据可能会经常更改。
这本质上就是您所说的“无限循环”,但这是一个误导性术语。它通常通过重复setTimeout()
调用来实现 - 不要使用setInterval()
. 您想在发送另一个请求之前等待响应或超时,否则事情可能会变得复杂并让您头疼。
考虑到对服务器的请求将随着该应用程序获得的流量而迅速成倍增加。每个请求都应该是安全的,但轻量级的。处理请求的服务器应该实现一种缓存形式,您不希望每个心跳请求都调用数据库。
这种老式的方法很有效,我已经看到它到处都在使用。不过,开发人员可以使用更新的技术:
一种较新的方法是使用WebSockets,但由于您使用的是 asp.net,我建议您查看Microsoft 的 SignalR,它结合了多种技术并确保在旧浏览器/设备上的兼容性。