摘要:如何實(shí)現(xiàn)基于事件驅(qū)動(dòng)的網(wǎng)絡(luò)編程場(chǎng)景當(dāng)客戶端發(fā)送數(shù)據(jù)到服務(wù)端,服務(wù)端返回相同信息。保持連接說明接下來(lái)的所有代碼僅用于簡(jiǎn)單的小生產(chǎn)環(huán)境需要考慮代碼的嚴(yán)謹(jǐn)性。但是使用進(jìn)程的方式不好,很不好。如果萬(wàn)個(gè)連接,豈不是要萬(wàn)個(gè)進(jìn)程例子四基于的實(shí)現(xiàn)很完美
php 如何實(shí)現(xiàn)基于事件驅(qū)動(dòng)的網(wǎng)絡(luò)編程 場(chǎng)景
當(dāng)客戶端發(fā)送數(shù)據(jù)到服務(wù)端,服務(wù)端返回相同信息。
保持連接
說明
接下來(lái)的所有代碼僅用于簡(jiǎn)單的小demo
生產(chǎn)環(huán)境需要考慮代碼的嚴(yán)謹(jǐn)性。
簡(jiǎn)單的接受數(shù)據(jù)并返回
$ telnet 0.0.0.0 8000 Trying 0.0.0.0... Connected to 0.0.0.0. Escape character is "^]". hello //客戶端輸入 hello //這個(gè)是服務(wù)端回顯的 Connection closed by foreign host.
上面的例子中,服務(wù)端在接收到客戶端數(shù)據(jù)后會(huì)返回相同信息,然后連接會(huì)被關(guān)閉。無(wú)法保持連接。?。
例子二$socket = stream_socket_server("tcp://0.0.0.0:8000"); while($conn = stream_socket_accept($socket)){ while($info = fread($conn,1024)){ fwrite($conn,$info); } }
上面的例子
簡(jiǎn)單的接受數(shù)據(jù)并返回
保持運(yùn)行
缺點(diǎn)是同時(shí)只能處理一個(gè)連接!?。。。?
$socket = stream_socket_server("tcp://0.0.0.0:8000"); while($conn = stream_socket_accept($socket)){ if(pcntl_fork()){ while($info = fread($conn,1024)){ fwrite($conn,$info); } } }
這里實(shí)際上fork了n個(gè)子進(jìn)程去處理n個(gè)請(qǐng)求。
但是使用fork進(jìn)程的方式不好,很不好。
如果10萬(wàn)個(gè)連接,豈不是要10萬(wàn)個(gè)進(jìn)程???oh,no!!
基于libevent的實(shí)現(xiàn),很完美?。?!?
0){ fwrite($conn,$info); } }); event_base_set($event,$base); event_add($event); $events[] = $event; }); event_base_set($event,$base); event_add($event); event_base_loop($base);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30415.html
摘要:兩個(gè)事件驅(qū)動(dòng)模型服務(wù)器平均每秒處理的請(qǐng)求數(shù)為服務(wù)器的一倍,而內(nèi)存降低了一半。事件驅(qū)動(dòng)模型的出現(xiàn),是為了解決傳統(tǒng)服務(wù)器與網(wǎng)絡(luò)工作負(fù)載的需求的不匹配,實(shí)現(xiàn)高度可伸縮服務(wù)器,并降低內(nèi)存開銷。 from http://oyanglul.us 本文基本上這為兩篇文章的翻譯和整合 -...
摘要:事件驅(qū)動(dòng)編程是圖形用戶界面和其他應(yīng)用程序例如應(yīng)用程序中使用的主要范例,用于執(zhí)行某些操作來(lái)響應(yīng)用戶輸入。我們來(lái)看一下事件驅(qū)動(dòng)編程帶來(lái)的收益?,F(xiàn)在讓我們看看采用事件驅(qū)動(dòng)編程方法如何實(shí)現(xiàn)上述相同的功能。 在這篇文章中我們將了解到什么是事件驅(qū)動(dòng)編程以及在Laravel中如何開始構(gòu)建一個(gè)事件驅(qū)動(dòng)應(yīng)用,同時(shí)我們還將看到如何通過事件驅(qū)動(dòng)編程來(lái)對(duì)應(yīng)用程序的邏輯進(jìn)行解耦。 在開始之前,先說明一下這篇文章...
摘要:項(xiàng)目介紹是一個(gè)全新的語(yǔ)言的運(yùn)行時(shí)環(huán)境,基于目前最新的進(jìn)行打造,支持最新的語(yǔ)言規(guī)范,同時(shí)提供了自己的運(yùn)行時(shí)標(biāo)準(zhǔn)庫(kù)。同樣也在的基礎(chǔ)上進(jìn)行打造,實(shí)現(xiàn)了一個(gè)除開發(fā)之外的一個(gè)全新的運(yùn)行環(huán)境。發(fā)布核心虛擬機(jī)的鏡像。整合運(yùn)行時(shí)框架。 showImg(https://segmentfault.com/img/bVbnQXK); polarphp 項(xiàng)目介紹 polarphp是一個(gè)全新的PHP語(yǔ)言的運(yùn)行時(shí)...
Node.js從2009年誕生至今,已經(jīng)發(fā)展了兩年有余,其成長(zhǎng)的速度有目共睹。從在github的訪問量超過Rails,到去年底Node.jsS創(chuàng)始人Ryan Dalh加盟Joyent獲得企業(yè)資助,再到今年發(fā)布Windows移植版本,Node.js的前景獲得了技術(shù)社區(qū)的肯定。InfoQ一直在關(guān)注Node.js的發(fā)展,在今年的兩次Qcon大會(huì)(北京站和杭州站)都有專門的講座。為了更好地促進(jìn)Node.j...
摘要:推薦閱讀資源庫(kù)工具應(yīng)用程序精選列表中文版有哪些鮮為人知,但是很有意思的網(wǎng)站一份攻城獅筆記每天搜集上優(yōu)秀的項(xiàng)目一些有趣的民間故事超好用的谷歌瀏覽器油猴插件合集目錄資源文檔文章圖書會(huì)談教程更多庫(kù)工具管理數(shù)據(jù)部署桌面發(fā)展監(jiān)控應(yīng)用資源文檔介紹文檔教 推薦閱讀 MongoDB 資源、庫(kù)、工具、應(yīng)用程序精選列表中文版 有哪些鮮為人知,但是很有意思的網(wǎng)站? 一份攻城獅筆記 每天搜集 Github ...
閱讀 3726·2023-04-25 22:43
閱讀 3727·2021-09-06 15:15
閱讀 1344·2019-08-30 15:54
閱讀 3584·2019-08-30 14:20
閱讀 2897·2019-08-29 17:16
閱讀 3125·2019-08-29 15:28
閱讀 3407·2019-08-29 11:08
閱讀 1079·2019-08-28 18:05