我知道我们可以通过定期轮询更改来做到这一点。这可以通过AJAX(例如jQuery.load()与一起使用setInterval())来实现。
jQuery.load()
setInterval()
但是我想知道还有其他方法可以做到这一点吗?其他成本更低或更有效的方法?出色的聊天客户端遵循什么逻辑?一旦您开始键入,另一端就会知道您正在键入。
我们在stackoverflow上遵循什么机制来更新upvote计数或显示已进行编辑等操作,而无需刷新页面?
当要使客户端和服务器保持实时(近)实时同步时,有三件事需要立即想到:
长轮询 :您已经提到了这一点,在客户端上设置了一个计时器,该计时器每10秒钟左右触发一次新的AJAX请求。这可能是3种技术中最“低级的”,也是效率最低的。但是它也是最兼容的(这意味着它将在所有浏览器中都可以使用,即使是像IE6 / 7之类的东西)
WebSockets :sdespont已经在评论中提到了这一点。尽管WebSockets比长轮询效率更高(因为它可以无限期地保持客户端与服务器之间的双向通信),但如果您要做的只是从服务器获取定期更新,则它可能是一个非常笨拙的解决方案。Firefox和Chrome的所有版本都支持它,IE在IE10中添加了支持
服务器发送的事件 :该 事件 似乎不太流行(或不太为人所知)。它允许服务器将更改发送到客户端(与客户端从服务器请求更改相反,长轮询就是这种情况)。这也是一种单向通信(服务器->客户端),并且在请求完成后,连接将关闭(与WebSockets保持两向通信保持打开状态相反)。再一次,并非所有的浏览器都支持它,并且根本不支持IE。
这也是一篇很好的文章,它解释了更现代的客户端- 服务器通信方式之间的区别。而且,如果您想了解有关服务器发送的事件的更多信息,这是一个很好的记录