在探讨Nacos长轮询机制前,先给大家普及一下几个概念:
短轮询:指客户端每隔一段时间向服务器发起一次Http请求,服务端收到请求后,进行处理,然后返回给客户端。
长轮询:指客户端向服务端发起一个带**超时时间(timeout)**的Http请求,并在Http连接超时前,不主动断开连接,需要服务端主动回写数据,否则将一直重复以上过程。
Nacos就是利用了长轮询机制,客户端会开启一个线程,不断向服务端发起一个配置是否存在变更的请求(30s超时),服务端收到请求后,如果配置不存在变更,并不会立即返回,而是当配置发生变更后,主动是否将消息回写给客户端。
客户端会存在两种情况:
请求超时:无配置变更,开启下一次轮询请求
服务器返回数据:解析服务器返回数据,通过Nameserver、dataId、group重新回去服务器配置,更新本地缓存,触发事件监听,开启下一次轮询请求。