多程式命名管通通訊【無血緣關係程式】PHP 版本

勺顛顛發表於2019-10-18

程式通訊:
1、中斷系統
2、無名管道【半雙工通訊】
只能用於父子程式,兄弟程式之間的通訊,且沒有名字,稱為無名管道,傳輸的資料是無格式的,雙方可自己定義格式,不依賴於檔案系統。
3、命名管道
用於無名管道無法實現的騷操作 ,沒任何關係的程式也能進行通訊【就是依賴於一個檔案描述符,只不過這檔案是一個FIFO型別的檔案即管道檔案,遵守FIFO原則,即佇列先進先出】

PS:務必瞭解程式阻塞,非阻塞原理,管道檔案,程式【執行狀態轉移】
應用場景舉例說明: 如使用php的socket API編寫一個類似workerman的網路框架,可以做統一中斷訊號事件處理
中斷處理程式只負責接受中斷請求,通過管道寫端寫入資料,主程式通過監聽檔案描述符上的事件【可讀事件【可以私下去擼一下stream socket 相關API,以及瞭解下IO複用函式的使用方法】再處理。不會讓中斷處理程式等待過長的時間。

當然通過命名管道也可以實現跨語言程式間的通訊。

$filePath = $argv[1];

if (posix_mkfifo($filePath,0666)<0){
    fprintf(STDOUT,"命名管道建立錯誤");
    exit(0);
}

$fd = fopen($filePath,"w");

while (is_resource($fd)){

    fprintf(STDOUT,">");
    $data = fgets(STDIN);
    if ($data){
        fwrite($fd,$data,strlen($data));
    }
}

exit(0);   
$filePath = $argv[1];

if (posix_mkfifo($filePath,0666)<0){
    fprintf(STDOUT,"命名管道建立錯誤");
    exit(0);
}

$fd = fopen($filePath,"r");

while (is_resource($fd)){

    $data = fgets($fd);
    if ($data){
        fwrite(STDIN,$data,strlen($data));
    }
}

exit(0);

jackChen

相關文章