发布于 2017-03-21 23:55:34 | 147 次阅读 | 评论: 0 | 来源: PHPERZ

这里有新鲜出炉的PHP面向对象编程,程序狗速度看过来!

PHP开源脚本语言

PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为php。


仓库地址 github

介绍

master :主进程
worker : 工作进程
基本和你开好几个命令行然后启动差不多的,就是加了一些进程管理之类的
  1. proc_open 可以重定向 worker 的STDIN, STDOUT, STDERR

  2. worker 挂掉了,然后 master 会检测到并重新启动一个 worker

  3. worker 可以向 master 发送消息,目前这个消息管道是通过 worker::STDOUT 来实现的,所有 worker 共享一个 STDOUT 资源句柄,然后子进程所有 echo 出来的内容都会在STDOUT, worker::STDOUT 在 master 那边就是一个文件指针,master 读取内容,消息输入内容 的区别就是 消息前后分别有 三个 \0 [即字节8个位都为0] 的字符,然后根据正则来提取出消息

  4. master 无法直接获取到 worker 的 进程 ID 所以,目前只简单使用了 顺序id来区分 worker

计划

把 worker 和 master 消息这块重写一下,用队列实现,队列服务使用我之前用文件实现的 php-queue 来进行,总之能自己写就自己写,学习实践

include "vendor/autoload.php";

define("FORK_FILE", __FILE__);
define("ROOT_PATH", __DIR__);
define("CACHE_PATH", ROOT_PATH . "/cache");


$worker = new \Core\Worker();

/**
 * 只需要实现on_worker 这个闭包函数
 * 里面的 $this 指向 实例化出来的 worker
 */
$worker->on_worker = function(){
    if($this->worker_id == 1){
        sleep(1);
        trigger_error("trigger_error");
        exit();
    }
    $time = time();
    echo "worker[{$this->worker_id}] say : hello world @{$time}\n";
};
$worker->count = 2; //设置进程数量
$worker->start();


最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务