任何脱离业务的架构设计都是耍流氓。
创新互联成立于2013年,我们提供高端重庆网站建设公司、网站制作、网站设计、网站定制、网络营销推广、小程序开发、微信公众号开发、成都网站营销服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为成都混凝土搅拌站企业提供源源不断的流量和订单咨询。
网页端收消息,究竟是推还是拉?
什么业务场景?
对于在网页端登录的用户A,发送方,也就是消息的来源有几方面:
消息的处理方,也就是系统侧,一般来说:
抛开这些技术细节不谈,暂且认为服务端对每一个用户都有一个“待收消息”的队列,里面存放了需要给这个用户的一切消息。
消息的接收方,也就是用户A,如果是在网页端登录,因为HTTP协议是“请求-响应”式的,服务端与网页之间没有消息通道,对于这类“收消息”的需求,是如何处理的呢?
方案一:轮询拉取
轮询拉取,是最容易想到的实现方式:
这种方式的优势是:实现简单,直观且,容易理解,互联网兴起时,人数不多的聊天室就是这么玩的。画外音:创办于1996年的互联网老站碧海银沙,曾经中国最火爆的聊天室,已于2017.9.27停止运营。
缺点也很明显:
更要命的是,在这种方案下,实时性与效率是一对不可调和的矛盾:如果将轮询周期设为1/10,将时延缩短到1秒,意味着100次轮询才会收到1条消息,请求有效性则降为了1%。
方案二:建立长连接
如果要兼顾实时性和效率,长连接是最佳之选,PC端聊天软件基本都是使用长连接。网页端常见的实现长连接的方式有两种:
这两种方案的细节不再展开,ta们均有一定的局限性。
更为通用的方式,是“长轮询”。
长轮询,是通过拼装HTTP短连接来达到长连接的效果,即保证了消息100%实时,又最大化的系统效率。
方案三:HTTP长轮询
HTTP长轮询的核心在于,浏览器与服务端之间建立了一条“通知连接”,它的特点是:
画外音:对于HTTP请求,为了提高效率,一般来说browser和web-server都会有一些设置,如果一条HTTP请求长时间没有数据(例如,150秒),会被断开。“通知连接”为了不被browser和web-server粗暴断开,一般会设置一个约定阈值(例如,小于150秒),由系统返回一个空消息,以便“优雅返回”。
更具体的,对于这条“夯住”与“只收推送通知”的“通知连接”,是怎么玩的呢?
场景一,发起通知连接时,队列里正好有消息,则:
场景二,发起通知连接时,队列里无消息,则:
场景三,新消息来时,正好有通知连接在,则:
上面三个场景的最终状态,都是“一定,永远,会有一条通知连接,连接在浏览器与服务器之间”,这样就能够保证消息的实时性。当然,有人会说,HTTP的返回与再次发起会有一个时间差,如果这个时间差,恰巧有新消息过来呢?
场景四,新消息来时,没有通知连接,则:
最后这个场景,发生的概率非常小,但也确保了在“HTTP的返回与再次发起会有一个时间差”内,消息不会丢失,在通知连接发起后,消息能够实时返回。
总结
网页端收消息,究竟是推还是拉?
【本文为专栏作者“58沈剑”原创稿件,转载请联系原作者】
文章题目:网页端收消息,究竟是推还是拉?
链接地址:http://www.shufengxianlan.com/qtweb/news45/496695.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联