hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - PHP问题 - 正文 请牢记本站网址www.sosophp.cn

php历程通讯有几种体式格局【php题目】

2019-11-26PHP问题搜搜PHP网52°c
A+ A-
php举行历程间通信的体式格局有好几种:管道(Pipe)及著名管道(named pipe)、信号(Signal)、报文(Message)行列(音讯行列)、同享内存、信号量(semaphore)、套接口(Socket)。

本文枚举一个举行引见,那就是是经由过程著名管道的体式格局。

管道用于承载简称之间的通信数据。为了轻易明白,能够将管道比作文件,历程A将数据写到管道P中,然后历程B从管道P中读取数据。

php供应的管道操纵API与操纵文件的API基础一样,除了建立管道运用posix_mkfifo函数,读写等操纵均与文件操纵函数雷同。

固然,你能够直接运用文件模仿管道,然则那样没法运用管道的特征了。

经由过程管道通信的也许思绪是,起首建立一个管道,然后子历程向管道中写入信息,父历程从管道中读取信息,如许就能够做到父子历程直接完成通信了。

<?php
/**
 * author: NickBai
 * createTime: 2016/12/2 0002 上午 11:12
 */
//建立管道
$pipePath = "/tmp/test.pipe";
if( !file_exists( $pipePath ) ){
    if( !posix_mkfifo( $pipePath, 0666 ) ){
        exit('make pipe false!' . PHP_EOL);
    }
}
//建立历程,子历程写管道,父历程读管道
$pid = pcntl_fork();
if( $pid == 0 ){
    //子历程写管道
    $file = fopen( $pipePath, 'w' );
    fwrite( $file, 'hello world' );
    sleep(1);
    exit();
}else{
    //父历程读管道
    $file = fopen( $pipePath, 'r' );
    //stream_set_blocking( $file, False );  //设置成读取非壅塞
    echo fread( $file, 20 ) . PHP_EOL;
    pcntl_wait($status);  //接纳子历程
}

注重:本代码只能在linux下运转,而且只能在php-cli形式下。

第7行:指定一个管道的途径,这里跟一般文件没什么区分。

第9行:经由过程 posix_mkfifo 函数建立 管道 而且设置读写权限为 0666

第15行:经由过程 pcntl_fork函数建立一个子历程。注重从现在开始,顺序将会被分红两个历程来实行。 pcntl_fork 函数 很特别,它挪用一次具有 多个返回值。在父历程中:它返回 子历程的ID 这个值是 大于0 的。在子历程中,它返回0。当返回 -1 时示意建立历程失利。

第17行:两个历程依据当前历程所取得的$pid的值差别,而进入差别的分支。

第18~22行:子历程翻开管道,并向个中写入hello world ,然后进入休眠,休眠完毕以后,退出。

第25~29行:父历程翻开管道,并举行读取,末了实行 29行的代码接纳掉子历程。这内里两个处所是壅塞的,起首是默认读的处所,要守候子历程发出exit敕令以后,才返回数据。另有就是接纳历程的 pcntl_wait要领。要比及历程退出。

以上就是php历程通信有几种体式格局的细致内容,更多请关注ki4网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
php历程通讯有几种体式格局【php题目】

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签: