待定
长连接续约机制
首先创建并返回会话信息以及续约超时时间
/cometd/handshake
[{"minimumVersion":"1.0","clientId":"ri5utn9wwd1vu1xs4w1gukw5mx","supportedConnectionTypes":["websocket","long-polling","callback-polling"],"advice":{"interval":0,"timeout":30000,"reconnect":"retry"},"channel":"/meta/handshake","id":"15","version":"1.0","successful":true}]
一个长连接里面每次发送2个请求
1.第一个请求获取消息数据信并且将expireTime设置为now + interval + this._maxInterval;
2.第二个发送心跳包到服务端服务端把expireTime改为0 同时_messageTime 改为now
如果在第二个心跳包未发送续约请求 则会触发过期回收session
/cometd/connect
[{"channel":"/meta/connect","id":"24","successful":true}]
断开链接
会只会发送第一个请求,过期则会触发回收
连接已经被回收获取已过期会返回-> 402::Unknown client 或者链接已经过期
长连接处理地方
org.cometd.server.CometDServlet#service
设置scheduler到request的地方
org.cometd.server.transport.AbstractHttpTransport#processMetaConnect
->
org.cometd.server.transport.AbstractStreamHttpTransport#suspend
request.getAttribute("org.cometd.scheduler")
定时任务
org.cometd.server.transport.AbstractHttpTransport.LongPollScheduler#schedule
清除session的地方
org.cometd.server.BayeuxServerImpl#doStart
->
org.cometd.server.ServerSessionImpl#sweep #判断是否过期移除session
->
org.cometd.server.BayeuxServerImpl#removeServerSession
->
org.cometd.server.ServerSessionImpl#removed
->
org.cometd.server.transport.AbstractHttpTransport#processMetaHandshake
主动续约的地方
org.cometd.server.ServerSessionImpl#cancelExpiration
cancelExpiration:544, ServerSessionImpl (org.cometd.server)
handle:660, BayeuxServerImpl (org.cometd.server)
handle:647, BayeuxServerImpl (org.cometd.server)
bayeuxServerHandle:492, AbstractHttpTransport (org.cometd.server.transport)
processMessages:204, AbstractHttpTransport (org.cometd.server.transport)
process:33, AbstractJsonpTransport (com.ewei.support.cometd.server.transport.jsonp)
handle:50, AbstractStreamHttpTransport (org.cometd.server.transport)
service:92, CometDServlet (org.cometd.server)
未主动续约
scheduleExpiration:557, ServerSessionImpl (org.cometd.server)
write:152, AbstractStreamHttpTransport (org.cometd.server.transport)
flush:344, AbstractHttpTransport (org.cometd.server.transport)
resume:357, AbstractHttpTransport (org.cometd.server.transport)
callSuperResume:49, AbstractJsonTransport (com.ewei.support.cometd.server.transport.json)
doResume:26, JsonTransport (com.ewei.support.cometd.server.transport.json)
process:40, AbstractJsonTransport (com.ewei.support.cometd.server.transport.json)
handle:50, AbstractStreamHttpTransport (org.cometd.server.transport)
service:92, CometDServlet (org.cometd.server)
run:748, Thread (java.lang)
长连接 默认会每隔一段时间完成续约,如果是续约则将expireTime改为0
当用户断开连接会触发unown断开连接服务端处理调用未主动续约
messageTime为上一次续约时间