swoole會(huì)在主進(jìn)程獨(dú)立起一個(gè)心跳線程,通過(guò)定時(shí)輪詢所有的連接,來(lái)判斷連接的生死,所以swoole的心跳不會(huì)堵塞任何業(yè)務(wù)邏輯。
圖片1.png
設(shè)置完成了之后,你會(huì)發(fā)現(xiàn)設(shè)置了定時(shí)檢測(cè)之后,如果客戶端沒(méi)在規(guī)定的時(shí)間之內(nèi)發(fā)送數(shù)據(jù)就會(huì)關(guān)閉。
heartbeat_check_interval: 服務(wù)器定時(shí)檢測(cè)在線列表的時(shí)間
heartbeat_idle_time: 連接最大的空閑時(shí)間 (如果最后一個(gè)心跳包的時(shí)間與當(dāng)前時(shí)間之差超過(guò)這個(gè)值,則認(rèn)為該連接失效)
配置建議
建議 heartbeat_idle_time 為 heartbeat_check_interval 的兩倍多一點(diǎn)。
這個(gè)兩倍是為了進(jìn)行容錯(cuò),允許丟一個(gè)包而多一點(diǎn)是考慮到網(wǎng)絡(luò)的延時(shí)。
為什么需要心跳包?客戶端如何維持心跳?
在從客戶端到服務(wù)器的一條巨大的鏈路中會(huì)經(jīng)過(guò)無(wú)數(shù)的路由器,其中每一個(gè)路由器都有可能會(huì)有檢測(cè)到多少秒時(shí)間內(nèi)無(wú)數(shù)據(jù)包則自動(dòng)關(guān)閉連接的這種節(jié)能機(jī)制,為了讓這個(gè)可能會(huì)出現(xiàn)的節(jié)能機(jī)制失效,客戶端可以設(shè)置一個(gè)定時(shí)器,每隔固定的時(shí)間都發(fā)一個(gè)隨機(jī)字符的一字節(jié)的數(shù)據(jù)包,通常我們把這種數(shù)據(jù)包就叫做心跳包。
