首頁  >  文章  >  php框架  >  swoole怎麼判斷fd是否連接

swoole怎麼判斷fd是否連接

(*-*)浩
(*-*)浩原創
2019-12-16 13:57:445188瀏覽

swoole怎麼判斷fd是否連接

心跳是什麼?

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

從TCP協定說起                         (建議學習: swoole視訊教學

)

我們時所建立一個五元組識別時一個連結有三次握手,而斷開一個連結有四次揮手。不管是伺服器還是客戶端發起連線的關閉,都會完整的走完四次揮手的過程,這樣,一切很完美,系統回收這個fd,應用層也可以透過onClose回調處理相關的事情.

fd是什麼?

fd學名是文件描述符,在unix的哲學就是一切皆文件中,這個fd就是系統層暴露給業務層的用來表示一個五元組網絡連接的標識。

你可以簡單的理解為一個索引,透過對這個fd的操作,系統層可以找到相應的連接而且進行的一系列操作,如發送資料到網瞳,進行連接關閉等等。

為什麼要心跳?

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

$server->close($fd);

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

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

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

什麼是心跳機制?

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

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

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

以上是swoole怎麼判斷fd是否連接的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn