PHP 다 중 스 레 드 프로 그래 밍 의 파이프 통신 실례 분석

이 사례 는 PHP 다 중 스 레 드 프로 그래 밍 의 파이프 통신 용법 을 설명 한다.모두 에 게 참고 하도록 공유 하 다.구체 적 인 분석 은 다음 과 같다.
하나의 스 레 드 가 개인 영웅주의 라면 많은 스 레 드 는 집단주의 이다.너 는 더 이상 독행 협 이 아니 라 지휘자 이다.
파이프 통신:
1.파 이 프 는 하나의 대열 이 라 고 볼 수 있 고 서로 다른 스 레 드 는 안에 글 을 쓸 수도 있 고 안에서 읽 을 수도 있다.바로
대기 열 끝 에 추가 하면 읽 기 는 줄 머리 에서 삭제 합 니 다.
 
2.파 이 프 는 보통 크기 가 있 습 니 다.기본 값 은 4K 입 니 다.즉,내용 이 4K 를 초과 하면 읽 을 수 밖 에 없고 안 으로 쓸 수 없습니다.
 
3.기본적으로 파 이 프 를 기록 하면 프로그램 을 읽 고 데 이 터 를 다 읽 을 때 까지 막 힙 니 다.읽 기 스 레 드 도 막 히 고,
   프로 세 스 가 파이프 에 데 이 터 를 기록 할 때 까지물론,당신 은 이러한 기본 속성 을 바 꿀 수 있 습 니 다.stream 로set_block  함수,비 차단 모드 로 설정 합 니 다.
 
다음은 제 가 나 누 어 설치 한 파이프 의 종류 입 니 다.

<?php
class Pipe
{
  public $fifoPath;
  private $w_pipe;
  private $r_pipe;
 
  /**
   *         
   *
   * @param string $name     
   * @param int $mode      ,           
   */
  function __construct($name = 'pipe', $mode = 0666)
  {
    $fifoPath = "/tmp/$name." . posix_getpid();
    if (!file_exists($fifoPath)) {
      if (!posix_mkfifo($fifoPath, $mode)) {
        error("create new pipe ($name) error.");
        return false;
      }
    } else {
      error( "pipe ($name) has exit.");
      return false;
    }
    $this->fifoPath = $fifoPath;
  }
///////////////////////////////////////////////////
//        
///////////////////////////////////////////////////
  function open_write()
  {
    $this->w_pipe = fopen($this->fifoPath, 'w');
    if ($this->w_pipe == NULL) {
      error("open pipe {$this->fifoPath} for write error.");
      return false;
    }
    return true;
  }
 
  function write($data)
  {
    return fwrite($this->w_pipe, $data);
  }
 
  function write_all($data)
  {
    $w_pipe = fopen($this->fifoPath, 'w');
    fwrite($w_pipe, $data);
    fclose($w_pipe);
  }
 
  function close_write()
  {
    return fclose($this->w_pipe);
  }
/////////////////////////////////////////////////////////
///          
////////////////////////////////////////////////////////
  function open_read()
  {
    $this->r_pipe = fopen($this->fifoPath, 'r');
    if ($this->r_pipe == NULL) {
      error("open pipe {$this->fifoPath} for read error.");
      return false;
    }
    return true;
  }
  function read($byte = 1024)
  {
    return fread($this->r_pipe, $byte);
  }
  function read_all()
  {
    $r_pipe = fopen($this->fifoPath, 'r');
    $data = '';
    while (!feof($r_pipe)) {
      //echo "read one K
"; $data .= fread($r_pipe, 1024); } fclose($r_pipe); return $data; } function close_read() { return fclose($this->r_pipe); } /** * * * @return boolean is success */ function rm_pipe() { return unlink($this->fifoPath); } } ?> /* , 。*/
본 논문 에서 말 한 것 이 여러분 의 phop 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기