提供Discuz ,ECShop ,PHPCMS ,帝国CMS ,CSS教程 ,PHP教程 ,DedeCMS ,WordPress ,HTML教程等cms问题查询.
当前位置: PHP问题 > php历程通讯有几种体式格局【php问题】,php

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网别的相干文章!

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

分享到:
赞(0) 打赏

支付宝扫一扫打赏

微信扫一扫打赏

标签:

上一篇:

下一篇:

相关推荐

0 条评论关于"php历程通讯有几种体式格局【php问题】,php"

最新评论

    暂无留言哦~~

博客简介

看古风美女插画Cos小姐姐,素材合集图集打包下载:炫龙网,好看二次元插画应有尽有,唯美小姐姐等你来。

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

服务热线:
 

 QQ在线交流

 旺旺在线