发布于 2017-03-21 23:55:34 | 147 次阅读 | 评论: 0 | 来源: PHPERZ
PHP开源脚本语言
PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为php。
master :主进程
worker : 工作进程
基本和你开好几个命令行然后启动差不多的,就是加了一些进程管理之类的
proc_open 可以重定向 worker 的STDIN, STDOUT, STDERR
worker 挂掉了,然后 master 会检测到并重新启动一个 worker
worker 可以向 master 发送消息,目前这个消息管道是通过 worker::STDOUT 来实现的,所有 worker 共享一个 STDOUT 资源句柄,然后子进程所有 echo 出来的内容都会在STDOUT, worker::STDOUT 在 master 那边就是一个文件指针,master 读取内容,消息 和 输入内容 的区别就是 消息前后分别有 三个 \0 [即字节8个位都为0] 的字符,然后根据正则来提取出消息
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();