溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

swoole判斷fd是否連接的方法

發(fā)布時間:2021-01-13 14:22:06 來源:億速云 閱讀:361 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關swoole判斷fd是否連接的方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

心跳是什么?

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

從TCP協(xié)議說起                        

我們都知道一個五元組標識一個網絡連接,創(chuàng)建一個連接有三次握手,而斷開一個連接有四次揮手。不管是服務器還是客戶端發(fā)起連接的關閉,都會完整的走完四次揮手的過程,這樣,一切很完美,系統(tǒng)回收這個fd,應用層也可以通過onClose回調處理相關的事情.

fd是什么?

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

你可以簡單的理解為一個索引,通過對這個fd的操作,系統(tǒng)層可以找到相應的連接而且進行的一系列操作,如發(fā)送數據到網瞳,進行連接關閉等等。

為什么要心跳?

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

$server->close($fd);

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

那系統(tǒng)為什么要回收fd,因為fd資源是有限的,所以必需重復利用。

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

什么是心跳機制?

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

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

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

關于“swoole判斷fd是否連接的方法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI