摘要:配合模塊,創(chuàng)建的子進(jìn)程可以異步的事件驅(qū)動(dòng)模式。默認(rèn)為阻塞讀取。函數(shù)用于將一個(gè)加入到的事件監(jiān)聽中。為事件類型的掩碼,可選擇關(guān)閉開啟可讀可寫事件,如,,或者。在程序中使用,可以理解為在進(jìn)程中將此注冊(cè)到事件中。
Process
Process是swoole內(nèi)置的進(jìn)程管理模塊,用來(lái)替代PHP的pcntl擴(kuò)展。
swoole_process支持重定向標(biāo)準(zhǔn)輸入和輸出,在子進(jìn)程內(nèi)echo不會(huì)打印屏幕,而是寫入管道,讀鍵盤輸入可以重定向?yàn)楣艿雷x取數(shù)據(jù)。
配合swoole_event模塊,創(chuàng)建的PHP子進(jìn)程可以異步的事件驅(qū)動(dòng)模式。
創(chuàng)建子進(jìn)程函數(shù)原型:
int swoole_process::__construct(mixed $function, $redirect_stdin_stdout = false, $create_pipe = true);
$function,子進(jìn)程創(chuàng)建成功后要執(zhí)行的函數(shù),底層會(huì)自動(dòng)將函數(shù)保存到對(duì)象的callback屬性上。
如果希望更改執(zhí)行的函數(shù),可賦值新的函數(shù)到對(duì)象的callback屬性。
$redirect_stdin_stdout,重定向子進(jìn)程的標(biāo)準(zhǔn)輸入和輸出。啟用此選項(xiàng)后,在進(jìn)程內(nèi)echo將不是打印屏幕,而是寫入到管道。讀取鍵盤輸入將變?yōu)閺墓艿乐凶x取數(shù)據(jù)。默認(rèn)為阻塞讀取。
$create_pipe,是否創(chuàng)建管道,啟用$redirect_stdin_stdout后,此選項(xiàng)將忽略用戶參數(shù),強(qiáng)制為true 如果子進(jìn)程內(nèi)沒(méi)有進(jìn)程間通信,可以設(shè)置為false。
1.7.22或更高版本允許設(shè)置管道的類型,默認(rèn)為SOCK_STREAM流式
參數(shù)$create_pipe為2時(shí),管道類型將設(shè)置為SOCK_DGRAM。
read(); passthru($cmd); } }, true, 2); $process->start(); $process->write("ls -l");//將參數(shù)傳入子進(jìn)程內(nèi) echo $data = $process->read();//獲取執(zhí)行結(jié)果
實(shí)例:web版本的shell
https://github.com/52fhy/swoo...
swoole還提供了直接操作底層epoll/kqueue事件循環(huán)的接口??蓪⑵渌麛U(kuò)展創(chuàng)建的socket,PHP代碼中stream/socket擴(kuò)展創(chuàng)建的socket等加入到Swoole的EventLoop中。
swoole_event_add函數(shù)用于將一個(gè)socket加入到swoole的reactor事件監(jiān)聽中。 函數(shù)原型:
bool swoole_event_add(int $sock, mixed $read_callback, mixed $write_callback = null, int `$flags` = null);
$sock支持文件描述符、stream資源、sockets資源。
$read_callback為可讀回調(diào)函數(shù)。
$write_callback為可寫事件回調(diào)。
$flags為事件類型的掩碼,可選擇關(guān)閉/開啟可讀可寫事件,如SWOOLE_EVENT_READ,SWOOLE_EVENT_WRITE,或者SWOOLE_EVENT_READ | SWOOLE_EVENT_WRITE。
在Server程序中使用,可以理解為在worker/taskworker進(jìn)程中將此socket注冊(cè)到epoll事件中。
在Client程序中使用,可以理解為在客戶端進(jìn)程中將此socket注冊(cè)到epoll事件中。
示例:
對(duì)比一下,下面這個(gè)會(huì)阻塞進(jìn)程:
" ; } else { fwrite ( $fp , "GET / HTTP/1.1 Host: www.52fhy.com " ); while (! feof ( $fp )) { echo fgets ( $fp , 1024 ); } fclose ( $fp ); } echo "Finish ";
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25665.html
摘要:消息隊(duì)列更常見(jiàn)的用途是主進(jìn)程分配任務(wù),子進(jìn)程消費(fèi)執(zhí)行。子進(jìn)程前面加了個(gè),這是為了防止父進(jìn)程還未往消息隊(duì)列中加入內(nèi)容直接退出。 前面幾節(jié)都是講解pcntl擴(kuò)展實(shí)現(xiàn)的多進(jìn)程程序。本節(jié)給大家介紹swoole擴(kuò)展的swoole_process模塊。 swoole多進(jìn)程 swoole_process 是swoole提供的進(jìn)程管理模塊,用來(lái)替代PHP的pcntl擴(kuò)展。 首先,確保安裝的swoole...
摘要:所以,我感覺(jué)學(xué)習(xí),需要一個(gè)引導(dǎo)。學(xué)習(xí)參考鏈接喵星球特別厲害的一個(gè)官網(wǎng)的幾個(gè)框架文檔優(yōu)勢(shì)先看一下的結(jié)構(gòu)設(shè)計(jì)的應(yīng)用場(chǎng)景的設(shè)計(jì)項(xiàng)目中引入一個(gè)簡(jiǎn)易的具體參考一篇文章,集合和的簡(jiǎn)易實(shí)例項(xiàng)目中引入結(jié)合致敬 前期學(xué)完了操作系統(tǒng),特別是知道了進(jìn)程,線程 調(diào)度的問(wèn)題?;貋?lái)看,發(fā)現(xiàn)了很多細(xì)節(jié)。第三次看文檔,最初經(jīng)一個(gè)高手朋友的介紹,看swoole,說(shuō)文檔寫的賊好。但是看的時(shí)候,也是很一頭霧水,只知道把de...
摘要:修復(fù)添加超過(guò)萬(wàn)個(gè)以上定時(shí)器時(shí)發(fā)生崩潰的問(wèn)題增加模塊,下高性能序列化庫(kù)修復(fù)監(jiān)聽端口設(shè)置無(wú)效的問(wèn)題等。線程來(lái)處理網(wǎng)絡(luò)事件輪詢,讀取數(shù)據(jù)。當(dāng)?shù)娜挝帐殖晒α艘院?,由這個(gè)線程將連接成功的消息告訴進(jìn)程,再由進(jìn)程轉(zhuǎn)交給進(jìn)程。此時(shí)進(jìn)程觸發(fā)事件。 本文示例代碼詳見(jiàn):https://github.com/52fhy/swoo...。 簡(jiǎn)介 Swoole是一個(gè)PHP擴(kuò)展,提供了PHP語(yǔ)言的異步多線程服務(wù)器...
摘要:安裝準(zhǔn)備或更高版本或更高版本安裝擴(kuò)展配置支持編輯在其中加入擴(kuò)展支持服務(wù)端代碼服務(wù)端客戶端代碼測(cè)試代碼在命令模式下輸入重新再開一個(gè)窗口可以用檢測(cè)如服務(wù)端客戶端如上,表示服務(wù)端啟動(dòng),客戶端連接服務(wù)端返回消息,一個(gè)閉環(huán)形成開發(fā)者頭條 1.安裝準(zhǔn)備 php-5.3.10 // 或更高版本 gcc-4.4 //或更高版本 make autoconf 2.安裝swoole擴(kuò)展 w...
摘要:配置了參數(shù)后將會(huì)啟用功能,務(wù)必要注冊(cè)個(gè)事件回調(diào)函數(shù)。周期性定時(shí)器一次性定時(shí)器清除定時(shí)器定時(shí)器回調(diào)函數(shù)注意最大不得超過(guò)。進(jìn)程中不能添加定時(shí)器。建議在回調(diào)里寫定時(shí)器。定時(shí)器示例防止重復(fù)每隔觸發(fā)一次后執(zhí)行此函數(shù) 本文示例代碼詳見(jiàn):https://github.com/52fhy/swoo...。 重新打開日志 在1.8.11及之后版本支持重新打開日志:向Server主進(jìn)程發(fā)送SIGRTMIN...
閱讀 1356·2023-04-26 00:35
閱讀 2728·2023-04-25 18:32
閱讀 3379·2021-11-24 11:14
閱讀 782·2021-11-22 15:24
閱讀 1432·2021-11-18 10:07
閱讀 6561·2021-09-22 10:57
閱讀 2787·2021-09-07 09:58
閱讀 3575·2019-08-30 15:54