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