什么是轮询机制?

什么是轮询机制?

一、什么是轮询:

轮询(Polling)是一种CPU决策如何提供周边设备服务的方式,又称“程控输入输出”(Programmed I/O)。轮询法的概念是:由CPU定时发出询问,依序询问每一个周边设备是否需要其服务,有即给予服务,服务结束后再问下一个周边,接着不断周而复始 。

以上是来自百度百科对轮询的解释。

二、轮询机制:

1、轮询是用来解决服务器压力过大的问题的。如果保持多个长连接,服务器压力会过大,因此。专门建立一个轮询请求的接口,里面只保留一个任务id,只需要发送任务id,就可以获取当前任务的情况。如果返回了结果,轮询结束,没有返回则等待一会儿,继续发送请求。

2、轮询不应该直接暴露出来,应该写在接口里面。比如说。请求一个列表,列表接口里面再调用轮询接口。

3、列表接口发送请求,返回任务id,2秒后,根据任务id发送轮询接口请求,返回结果为无。。继续等待,4秒后,继续发送轮序请求,请求若返回结果,上抛到列表接口结果,列表接口结果继续上抛,请求结束。

三、长轮询

长轮询本身不是一种真正的推送技术,而只是传统轮询技术的一个变种。然而,其能够在真正推送技术无法实现时模拟推送机制。

在长轮询机制中,客户端像传统轮询一样从服务器请求数据。然而,如果服务器没有可以立即返回给客户端的数据,则不会立刻返回一个空结果,而是保持这个请求等待数据到来(或者恰当的超时),之后将数据作为结果返回给客户端。

例如,BOSH是一个常见的、长久的、在TCP困难或无法实现的情况下(如在使用浏览器的情况下)使用长轮询模拟TCP的技术。这也是一种XMPP中隐含的技术,苹果公司将其用于iCloud推送支持。

通过以上对轮询机制的分析,我们发现不管是普通的轮询还是长轮询,都是单向的通信,都完全依赖客户端不断的发送请求。在数据量较大的情况,这将极大的消耗服务器资源。

那有没有比轮询更好的解决方案?

当然有,在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

websocket在实时通信领域运用的比较多,比如社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基于位置的应用、在线教育、智能家居等需要高实时的场景。

虽然跑通一个简单的websocket消息发送看起来不难,但实践中,往往还有不少的细节需要处理,比如网络心跳检测,断网自动重连,断网消息自动补发,消息去重, Websocket集群搭建,性能优化等等,要做的完善一点其实还是有不少的工作量。

小编推荐一款免费的的第三方websocket平台给大家 – GoEasyGoEasy的功能非常完善,使用特别简单,不需搭建websocket服务,几行代码,就可以搞定websocket实时通讯,支持Web页面、各种小程序、Uniapp、Taro和Cocos等各种Web技术平台。比自己搭建websocket服务成本更低,大家可以访问GoEasy官网来感受一下哦。


Comments are closed.