摘要:無數(shù)個專業(yè)送給啦啦啦啦,開始碼注意,將監(jiān)聽設(shè)置為非阻塞模式這里值得注意,我們聲明兩個數(shù)組用來保存事件和連接歡迎來到聊天室發(fā)言注意遵守當(dāng)?shù)胤煞ㄒ?guī)使用全局的和非阻塞模式下,注意的寫法會稍微特殊一些。
原文地址:https://t.ti-node.com/thread/...
這段時間相比大家也看到了,本人離職了,一是在家偷懶實在懶得動手,二是好不容易想寫點(diǎn)兒時間全部砸到數(shù)據(jù)結(jié)構(gòu)和算法那里了。
今兒回過頭來,繼續(xù)這里的文章。那句話是怎么說的:
“自己選擇的課題,含著淚也得磕完!”(圖文無關(guān),詳情點(diǎn)擊這里)。
其實在上一篇libevent文章中(《PHP socket初探 --- 硬著頭皮繼續(xù)libevent(二)》),如果你總結(jié)能力很好的話,可以觀察出來我們嘗試?yán)胠ibevent做了至少兩件事情:
毫秒級別定時器
信號監(jiān)聽工具
大家都是碼php的,也喜歡把自己說的洋氣點(diǎn)兒:“ 我是寫服務(wù)器的 ”。所以,今天的第一個案例就是拿libevent來構(gòu)建一個簡單粗暴的http服務(wù)器:
樣做 if( ( $connect_socket = socket_accept( $listen_socket ) ) != false){ echo "有新的客戶端:".intval( $connect_socket ).PHP_EOL; $msg = "HTTP/1.0 200 OK Content-Length: 2 Hi"; socket_write( $connect_socket, $msg, strlen( $msg ) ); socket_close( $connect_socket ); } }, $listen_socket ); $event->add(); $event_base->loop();
將代碼保存為test.php,然后php http.php運(yùn)行起來。再開一個終端,使用curl的GET方式去請求服務(wù)器,效果如下:
這是一個非常非常簡單地不能再簡單的http demo了,對于一個完整的http服務(wù)器而言,他還差比較完整的http協(xié)議的實現(xiàn)、多核CPU的利用等等。這些,我們會放到后面繼續(xù)深入的文章中開始細(xì)化豐富。
還記得我們使用select系統(tǒng)調(diào)用實現(xiàn)了一個粗暴的在線聊天室,select這種業(yè)余的都敢出來混個聊天室,專業(yè)的絕對不能慫。
無數(shù)個專業(yè)???????????????送給libevent!
啦啦啦啦,開始碼:
$conn_item ){ if( $conn != $conn_item ){ $msg = intval( $conn )."說 : ".$buffer; socket_write( $conn_item, $msg, strlen( $msg ) ); } } }, $conn ); $event->add(); // 此處值得注意,我們需要將事件本身存儲到全局?jǐn)?shù)組中,如果不保存,連接會話會丟失,也就是說服務(wù)端和客戶端將無法保持持久會話 $event_arr[ intval( $conn ) ] = $event; } }, $fd ); $event->add(); $event_base->loop();
將代碼保存為server.php,然后php server.php運(yùn)行,再打開其他三個終端使用telnet連接上聊天室,運(yùn)行效果如下所示:
嘗試放一張動態(tài)圖試試,看看行不行,自己制作的gif都特別大,不知道帶寬夠不夠。
截止到這篇為止,死磕Libevent系列的大體核心三把斧就算是掄完了,弄完這些,你在遇到這些代碼的時候,就應(yīng)該不會像下面這個樣子了:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/29647.html
摘要:類就是產(chǎn)生各種不同類型事件的產(chǎn)出器,比如定時器事件讀寫事件等等,為了提升民族榮譽(yù)感,我們將這些各種事件比作各種戰(zhàn)斗機(jī)比如殲殲和殲。類就相對容易介入了,這玩意顯然就是一個航空母艦了,為了提升民族榮譽(yù)感,我們就把類當(dāng)作是遼寧艦。 [原文地址:https://blog.ti-node.com/blog...] 實際上php.net上是有event擴(kuò)展的使用說明手冊,但是呢,對于初學(xué)者來說卻并...
摘要:原文地址正如標(biāo)題所言,顫顫抖抖開篇。于是只能是你自己,把單子上的個快遞逐次和收到的對比一遍,然后對比完畢后再把這個單子給了阿梅,然后阿梅繼續(xù)等。剃光頭前的阿梅,就是,不敢正眼看老板娘一眼。剃光頭后的阿梅,就是,可徒手接魔鬼隊的死亡之球。 [原文地址:https://blog.ti-node.com/blog...] 正如標(biāo)題所言,顫顫抖抖開篇epoll。顫顫抖抖的原因大概也就是以前幾乎...
摘要:運(yùn)行機(jī)制小程序啟動會有兩種情況,一種是冷啟動,一種是熱啟動。建議小程序在必要時使用監(jiān)聽內(nèi)存告警事件,進(jìn)行必要的內(nèi)存清理。 前言 以小程序為切入點(diǎn),深入理解總結(jié)方方面面的知識點(diǎn),做成系列文章,希望能得到大神的指點(diǎn)和幫助新人入門,承上啟下才是好程序猿由于是系列第一篇文章,緊跟著的是一大段廢話,只關(guān)心技術(shù)的可以跳過 轉(zhuǎn)眼半年又要過去了,意味著來新公司快半年了,離上次寫文章也半年了,渾渾噩噩...
摘要:原文地址要想更好了解編程,有一個不可繞過的環(huán)節(jié)就是在中,一切皆文件實際上要文件干啥不就是讀寫么所以,這句話本質(zhì)就是才是王道用的打開文件關(guān)閉文件讀讀寫寫,這叫本地文件在編程中,本質(zhì)就是網(wǎng)絡(luò)所以,在開始進(jìn)一步的編程前,我們必須先從概念上認(rèn)識好 [原文地址:https://blog.ti-node.com/blog...] 要想更好了解socket編程,有一個不可繞過的環(huán)節(jié)就是IO.在Lin...
閱讀 2958·2021-11-08 13:20
閱讀 1031·2021-09-22 15:20
閱讀 660·2019-08-30 15:53
閱讀 1964·2019-08-30 15:43
閱讀 1278·2019-08-29 17:21
閱讀 540·2019-08-29 12:15
閱讀 2375·2019-08-28 17:51
閱讀 3142·2019-08-26 13:26