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

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

但我想知道还有其他方法吗? 其他成本较低的方法或更有效的方法? 一个很棒的聊天客户端遵循什么逻辑? 一旦你开始打字,另一端就会知道你正在打字。

我们在stackoverflow上遵循什么机制来更新upvote计数或显示已经编辑等等而没有刷新页面?

在保持客户端和服务器在(接近)实时同步时,有三件事情立即浮现在脑海中:

  • long polling :你已经提到过这个,你在客户端设置了一个定时器,每隔10秒就会触发一个新的AJAX请求。 这可能是3中最“低技术”的,也是效率最低的; 但它也是最兼容的(意味着它适用于所有浏览器,甚至像IE6 / 7这样的东西)

  • WebSockets :sdespont在评论中已经提到过这个。 虽然WebSockets比长轮询更有效(因为它只是让双向客户端 – 服务器通信无限期地打开),但如果你要做的就是从服务器获得定期更新,那么它可能是一个非常严厉的解决方案。 Firefox和Chrome的所有版本都支持它, IE在IE10中增加了支持

  • 服务器发送的事件 :这个事件似乎不太受欢迎(或者只是不太知名)。 它允许服务器向客户端发送更改(与客户端请求来自服务器的更改相反,如长轮询的情况)。 这也只是一种单向通信(服务器 – >客户端),并且在请求完成后连接关闭(与双向通信保持打开的WebSockets相反)。 再一次,并非所有浏览器都支持它, 并且根本没有IE支持

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