心跳在swoole里的實(shí)現(xiàn)?

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ù)包就叫做心跳包。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是心跳呢? 心跳用于判斷一個(gè)連接是正常還是斷開(kāi)的狀態(tài) 例如:TCP中使用五元組標(biāo)識(shí)一個(gè)網(wǎng)絡(luò)連接,創(chuàng)建TCP連接...
    JunChow520閱讀 2,169評(píng)論 0 3
  • 上一節(jié)我們講述了websocket在swoole中的使用,并且我們也給出了一個(gè)簡(jiǎn)單的聊天模型,不同的客戶端可以相互...
    yichen_china閱讀 4,174評(píng)論 2 5
  • 心跳是什么? 顧名思義,心跳是判斷一個(gè)事物生還是死的一個(gè)標(biāo)準(zhǔn),在swoole里,心跳是指用來(lái)判斷一個(gè)連接是正常還是...
    一個(gè)人的北京_閱讀 2,302評(píng)論 0 1
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,313評(píng)論 0 5
  • PHP常用socket創(chuàng)建TCP連接,使用CURL創(chuàng)建HTTP連接,為了簡(jiǎn)化操作,Swoole提供了Client類(lèi)...
    JunChow520閱讀 3,958評(píng)論 0 3

友情鏈接更多精彩內(nèi)容