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