发表于: 2019-10-20 23:50:25

1 798


今日完成的事

       完成签到页面

明日计划的事

      开始写消息页面

收获

      跟师兄讨论了下后台定时推送的问题,有种方法是http轮询的方法,分为长轮询和短轮询,

轮询就是自己不断去看有没数据。以点餐排号为例,轮询就是每隔一段时间就去看看有位没有。短的轮询就是看到没位时就坐下来休息一下再去问。长轮询就是一直在前台耗着,一定要服务员给你个位,通常坚持一段时间之后服务员把你赶走(或者你自己放弃了),你一坐下也不休息马上又去找服务员,开始新一轮长轮询。

短轮询就是没结果时直接返回,长轮询就是没结果等到有结果。

展开说一下,

利用Http协议实现服务器推送有两种常见的思路:

短轮询拉

客户端不停的去向服务器发送轮询请求,如果有数据更新,客户端能也能尽快(取决于轮询间隔)获取最新的数据,这种方式被称为Http短轮询。

这里写图片描述

这种方式有如下缺点:

因为是短轮询,因此一定时间t内需要进行轮询的次数就更多,而Http的连接是需要tcp三次握手等资源开销的。

由图可以看出,但是服务端数据发生更新时,客户端并不是立刻收到更新的数据(除去网络传输仍然还需要时间),而只能是在下一次轮询的时候才能感知到数据的变更。


长轮询推

长轮询的思路是这样的:尽量减少轮询的次数,从而减少资源开销。为了减少轮询次数,那么每次轮询的时间跨度就需要比较长,因此成为长轮询,同时也希望长轮询模型的每一次轮询效率要高于短轮询。

这里写图片描述

长轮询模型有这么几个特征:

  • 每次轮询的间隔不固定
  • 服务器对每次轮询做出响应的条件是:超时或者数据更新
  • 长轮询模型中,客户端能实时感知到服务器端数据更新

由于很多服务器都具有异步处理连接的能力,因此图中的阻塞消耗的资源比较小。

还有种就是websocket的方式了

WebSocket 是 html5 规范发布的新协议,和 http协议完全是两个不同的概念,或者说基本没关系;WebSocket 协议 和 http协议的唯一联系点在于,WebSocket 协议为了兼容现有浏览器的握手规范而采用了 http协议中的握手规范 以建立WebSocket连接;

采用 WebSocket 协议后,服务器可以主动推送消息给客户端;而不需要客户端以(长/短)轮询的方式发起http请求到server以获取数据更新反馈;这样一来,客户端只需要经过一次HTTP请求,就可以做到源源不断的信息传送了(在程序设计中,这种设计叫做回调,即:server 端有信息了再来通知client 端,而不是 client 端 每次都傻乎乎地跑去轮询server端 是否有消息更新)

三者的区别


返回列表 返回列表
评论

    分享到