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