聊聊swoole的心跳

來源:互聯網
上載者:User
來自:桶哥的一篇關於swoole的心跳的文章,作為Swoole顧問(顧得上就問,是為「顧問」)得推一下這篇文章,最後只留下一配置,其實我也不是太明白原理,我在想如果是區域網路裡還需要心跳?

——————————————————————————————————————————————————————————————————————

swoole提供了一個心跳的功能,很多朋友感到困惑。

心跳是什嗎?

顧名思義,心跳是判斷一個事物生還是死的一個標準,在swoole裡,心跳是指用來判斷一個串連是正常還是斷開的。

從TCP協議說起

我們都知道一個五元組標識一個網路連接,建立一個串連有三向交握,而斷開一個串連有四次揮手。不管是伺服器還是用戶端

發起串連的關閉,都會完整的走完四次揮手的過程,這樣,一切很完美,系統回收這個fd,應用程式層也可以通過onClose回調處理相關的事情.

fd是什嗎?

fd學名是檔案描述符,在unix的哲學就是一切皆檔案中,這個fd就是系統層暴露給業務層的用來表示一個五元組網路連接的標識。你可以簡單的理解為一個索引,通過對這個fd的操作,系統層可以找到相應的串連而且進行的一系列操作,如發送資料到網瞳,進行串連關閉等等。

為什麼要心跳?

剛才提到,如果我們要關閉某個串連,我們可以在業務層對fd發起關閉串連的操作,以swoole為例:

$server->close($fd);

正常情況下,都會走完整個四次揮手,(swoole會有onClose回調),系統回收fd,以待分配給其他的串連。

那系統為什麼要回收fd,因為fd資源是有限的,所以必需重複利用。

但在某些情況下,如突然拔掉網線或藍翔演習挖斷光纜,服務端並不能感知到這個串連的異常,但實際上是這個串連已經失效了,如果沒有一個回收機制,這類串連將用光所有的fd,導致系統不再能接受新的串連請求,所以就有了心跳機制。

什麼是心跳機制?

心跳機制就是業務層來提供一個串連是否存活的一個方法,讓系統能判定一個串連是否失效。一般有兩種實現方式:

1: 用戶端定時發送一個心跳包,告訴伺服器我還活著,伺服器定時檢測所有用戶端列表,看他們最後一個心跳包的時間是否過長,如果過長,則認為已無心跳,判定為死串連,主動關閉這個串連。

2: 伺服器定時詢問所有的用戶端,你們還活著嗎?如果活著,給我個回饋,沒得到回饋的用戶端,格殺勿論。

兩種心跳方案有什麼區別?

第一種方案,對伺服器和網路的壓力更小,而且更具有靈活性,但需要用戶端配合定時發送心跳包。

第二種方案,對伺服器和網路壓力更大,不建議使用。

心跳在swoole裡的實現

swoole採用的是第一種方案

swoole會在主進程獨立起一個心跳線程,通過定時輪詢所有的串連,來判斷串連的生死,所以swoole的心跳不會堵塞任何商務邏輯。

那怎麼判斷串連的生死了?swoole在connection結構體中有 time_t last_time 欄位,用來存放最後一次收包的時間戳記,進而通過與這個時間對比來判定是否存活

於是,swoole有兩個配置:

heartbeat_check_interval: 伺服器定時檢測線上列表的時間

heartbeat_idle_time: 串連最大的空閑時間 (如果最後一個心跳包的時間與目前時間之差超過這個值,則認為該串連失效)

配置建議

建議 heartbeat_idle_time 為 heartbeat_check_interval 的兩倍多一點。

這個兩倍是為了進行容錯,允許丟一個包

而多一點是考慮到網路的延時。

你可以跟據實際的業務來調整這個容錯率(允許丟幾個包)。

補充

1、系統層面也提供心跳機制,只不過粒度相對比較粗,而且時間稍長,沒有應用程式層靈活

2、swoole還提供ping的功能,通過配置ping值,swoole核心可以判斷只是一個心跳包,而不會,也沒必要把資料包轉寄應用程式層(onReceive)。

3、心跳不只是swoole專屬,大多數tcp的網路服務都會考慮到這個問題

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.