Netty 是如何创建长连接的?
设 keepAlive 为 true;则使用底层操作系统 TCP 的 keepAlive 来保活,其本质也是定时发送心跳,但是只是一个 ACK 响应,报文极小,具体可查询 TCP KeepAlive 深入了解;
RocketMq 的长轮询如何实现的?
利用 Netty ,channel 被 PullRequestHolderService 所 hold 住(管理),对于 Netty 来说,只有往 channel 里写数据(writeAndFlush),才表示响应;通过定时任务来轮询结果判断是否超时;
Nacos 1.4 x 版本如何实现长轮询?
利用 req.startAsync 获取异步上下文,这样方法返回(tomcat 线程执行完毕)就不会立即发出响应;
在 Nacos 2.x 以后使用 Grpc 实现长连接(本质也是 Netty),只需要设置 keepAlive 属性,而不需要应用层实现心跳,底层的 keepAlive 消耗更低;