小编典典

将更改推送到网页而不刷新

ajax

我知道我们可以通过定期轮询更改来做到这一点。这可以通过AJAX(例如jQuery.load()与一起使用setInterval())来实现。

但是我想知道还有其他方法可以做到这一点吗?其他成本更低或更有效的方法?出色的聊天客户端遵循什么逻辑?一旦您开始键入,另一端就会知道您正在键入。

我们在stackoverflow上遵循什么机制来更新upvote计数或显示已进行编辑等操作,而无需刷新页面?


阅读 256

收藏
2020-07-26

共1个答案

小编典典

当要使客户端和服务器保持实时(近)实时同步时,有三件事需要立即想到:

  • 长轮询 :您已经提到了这一点,在客户端上设置了一个计时器,该计时器每10秒钟左右触发一次新的AJAX请求。这可能是3种技术中最“低级的”,也是效率最低的。但是它也是最兼容的(这意味着它将在所有浏览器中都可以使用,即使是像IE6 / 7之类的东西)

  • WebSockets :sdespont已经在评论中提到了这一点。尽管WebSockets比长轮询效率更高(因为它可以无限期地保持客户端与服务器之间的双向通信),但如果您要做的只是从服务器获取定期更新,则它可能是一个非常笨拙的解决方案。Firefox和Chrome的所有版本都支持它,IE在IE10中添加了支持

  • 服务器发送的事件 :该 事件 似乎不太流行(或不太为人所知)。它允许服务器将更改发送到客户端(与客户端从服务器请求更改相反,长轮询就是这种情况)。这也是一种单向通信(服务器->客户端),并且在请求完成后,连接将关闭(与WebSockets保持两向通信保持打开状态相反)。再一次,并非所有的浏览器都支持它,并且根本不支持IE。

也是一篇很好的文章,它解释了更现代的客户端-
服务器通信方式之间的区别。而且,如果您想了解有关服务器发送的事件的更多信息,这是一个很好的记录

2020-07-26