1. 客户端发起心跳请求:默认30秒后服务端返回响应,收到响应后,客户端立即发起下一次心跳请求。
也就是客户端与服务端心跳交互中,虽然第一次是由客户端发起,但服务端不会立即返回响应,而是三十秒后返回响应,
这种交互更多的像是由服务端发起连接保持交互。
2. 当服务端关闭或断开与客户端的连接,cometd客户端底层实现会立即通知客户端应用实现的连接监听器。
(最底层发起者是AsyncHttpConnection.handle)
3. 此时cometd的实现会开启定时重连线程,重现向服务端发起初始化请求,第一次一秒执行,第二次延迟两秒,一次类 推,直到再次与服务端建立连接。
4. 跟踪端口监听状态得出:客户端先发送握手请求,然后发送连接请求,只后的心跳机制,和接收服务端推送的信息,都是在一个连接上进行,这个连接一直存在,只有发送其它的信息,才通过新的端连接发送。
5. 如果是客户端主动断开连接,由于服务端处理客户端的心跳请求默认是30秒后才回响应,所以服务端30秒后才会检测到客户端断开连接了,此时会清除为客户端建立的session。
30秒的间隔时间如果过长,则服务端检测客户端连接断开则会延迟太长,30秒的的间隔时间,如果太短,则会增加客户端的心跳请求次数。