待定
長連接續約機制
首先創建並返回會話信息以及續約超時時間
/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爲上一次續約時間