在Stack Overflow站点上,我们可以异步地看到以下更新。
根据我的理解,它可以在XMLHttpRequest(XHR)请求中异步完成,也许可以在setInterval
的帮助下完成。
Confusions :在Firefox中,没有XHR请求即将到来,即便如此,我也可以异步地看到上述更改。
这是什么类型的实现?如何在ASP.NET MVC中完成?
答案 0 :(得分:4)
这个令人印象深刻和美丽的东西是使用Ajax从客户端到服务器的异步调用。
一种非常简单的方法是使用jQuery Ajax在setInterval中进行异步调用以搜索问题的“更新”(这是ID为17779628的问题。我们可以在{{3}上看到} = P)。因此,对服务器的调用可以传递此ID和最后一次调用服务器的TimeStamp(日期)。然后,服务器将TimeStamp发生的更新带到DateTime.Now
。
我不确定Stack Overflow的真正实现,但我已经做了很多这样的事情。
另一个提示:
有改进。 ;) 现代浏览器包含URL的实现。由于套接字是“点对点”而不是“客户端 - 服务器”,现代浏览器不需要使用setInterval的方法。相反,您可以在WebSocket中实现WebSocket开放,然后服务器可以在发生更新时立即发送更新(您可以使用包含事件的设计模式)。
查看JavaScript以查看哪些浏览器支持WebSocket。
修改强>
无论如何,我刚刚为你打开了代码。 Stack Overflow的JavaScript代码对JavaScript代码使用CanIUse设计模式。只需查看浏览器控制台中的StackExchange
变量即可。这是JavaScript代码的核心。如您所见,此StackExchange
变量构建了一个完整的singleton。现在,搜索StackExchange.realtime.init('sockets.ny.stackexchange.com:80');
然后,在您的控制台上查看StackExchange.realtime.init
的实现。它们似乎支持使用WebSocket进行异步更新。这很好,很现代,但只有新的浏览器版本支持。如果需要保持向后兼容性,则可以同时支持WebSocket(用于新)和Ajax实现(用于旧浏览器)。
答案 1 :(得分:1)
答案 2 :(得分:0)
我最近回答了一个类似的问题: How do I display real-time information to the user?
如Nathan Fisher
所述,您需要查看Websockets和SignalR。
关于您在Firefox中没有看到XHR请求,请尝试查找Websockets。在Chrome中,我可以在每个转到的SO页面上看到一个Websocket。
请注意,正在处理有关我的收件箱,我的声誉的信息,同时我正在写这个答案Nathan Fisher
对他的帖子进行了编辑,所以我可以看到该页面也在处理(我看到“已经对这篇文章进行了编辑”)。