新聞中心
這篇文章將為大家詳細(xì)講解有關(guān)swoole判斷fd是否連接的方法,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。創(chuàng)新互聯(lián)擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營(yíng)銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
心跳是什么?
顧名思義,心跳是判斷一個(gè)事物生還是死的一個(gè)標(biāo)準(zhǔn),在swoole里,心跳是指用來判斷一個(gè)連接是正常還是斷開的。
從TCP協(xié)議說起
我們都知道一個(gè)五元組標(biāo)識(shí)一個(gè)網(wǎng)絡(luò)連接,創(chuàng)建一個(gè)連接有三次握手,而斷開一個(gè)連接有四次揮手。不管是服務(wù)器還是客戶端發(fā)起連接的關(guān)閉,都會(huì)完整的走完四次揮手的過程,這樣,一切很完美,系統(tǒng)回收這個(gè)fd,應(yīng)用層也可以通過onClose回調(diào)處理相關(guān)的事情.
fd是什么?
fd學(xué)名是文件描述符,在unix的哲學(xué)就是一切皆文件中,這個(gè)fd就是系統(tǒng)層暴露給業(yè)務(wù)層的用來表示一個(gè)五元組網(wǎng)絡(luò)連接的標(biāo)識(shí)。
你可以簡(jiǎn)單的理解為一個(gè)索引,通過對(duì)這個(gè)fd的操作,系統(tǒng)層可以找到相應(yīng)的連接而且進(jìn)行的一系列操作,如發(fā)送數(shù)據(jù)到網(wǎng)瞳,進(jìn)行連接關(guān)閉等等。
為什么要心跳?
剛才提到,如果我們要關(guān)閉某個(gè)連接,我們可以在業(yè)務(wù)層對(duì)fd發(fā)起關(guān)閉連接的操作,以swoole為例:
$server->close($fd);
正常情況下,都會(huì)走完整個(gè)四次揮手,(swoole會(huì)有onClose回調(diào)),系統(tǒng)回收fd,以待分配給其他的連接。
那系統(tǒng)為什么要回收fd,因?yàn)閒d資源是有限的,所以必需重復(fù)利用。
但在某些情況下,如突然拔掉網(wǎng)線或藍(lán)翔演習(xí)挖斷光纜,服務(wù)端并不能感知到這個(gè)連接的異常,但實(shí)際上是這個(gè)連接已經(jīng)失效了,如果沒有一個(gè)回收機(jī)制,這類連接將用光所有的fd,導(dǎo)致系統(tǒng)不再能接受新的連接請(qǐng)求,所以就有了心跳機(jī)制。
什么是心跳機(jī)制?
心跳機(jī)制就是業(yè)務(wù)層來提供一個(gè)連接是否存活的一個(gè)方法,讓系統(tǒng)能判定一個(gè)連接是否失效。一般有兩種實(shí)現(xiàn)方式:
1: 客戶端定時(shí)發(fā)送一個(gè)心跳包,告訴服務(wù)器我還活著,服務(wù)器定時(shí)檢測(cè)所有客戶端列表,看他們最后一個(gè)心跳包的時(shí)間是否過長(zhǎng),如果過長(zhǎng),則認(rèn)為已無心跳,判定為死連接,主動(dòng)關(guān)閉這個(gè)連接。
2: 服務(wù)器定時(shí)詢問所有的客戶端,你們還活著么?如果活著,給我個(gè)回饋,沒得到回饋的客戶端,格殺勿論。
關(guān)于“swoole判斷fd是否連接的方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
網(wǎng)頁題目:swoole判斷fd是否連接的方法
文章分享:http://www.dlmjj.cn/article/jhjhih.html