1. 文章
  2. 文章详情

php7守护进程实现redis订阅发布功能

如何使用php写守护进程

1、首选需要安装两个扩展pcntl 和 posix ,这两个扩展是在php自带库里的,就是前面安装php的时候下载的php解压后,在解压目录里的 ext 目录下寻找,然后安装。

下面见图示安装教程。

首先进入我们之前安装php的解压目录寻找这两个文件

cd /test

cd php/

cd php-7.1.4/

如下图所示列

php7守护进程实现redis订阅发布功能

2、先安装pcntl

cd pcntl

/usr/local/php7/bin/phpize

./configure --with-php-config=/usr/local/php7/bin/php-config

php7守护进程实现redis订阅发布功能

这里缺少autoconf 使用yum install autoconf 安装

php7守护进程实现redis订阅发布功能

然后make make install

php7守护进程实现redis订阅发布功能

安装完成

3、接下来安装posix (注,这里安装php的时候posix自动安装了,所以其实我这个环境不需要重新安装posix,如果没有的话,这里的演示一遍)

cd ../posix

/usr/local/php7/bin/phpize

./configure --with-php-config=/usr/local/php7/bin/php-config

php7守护进程实现redis订阅发布功能

make make install

php7守护进程实现redis订阅发布功能

然后加到php.ini文件里去

php7守护进程实现redis订阅发布功能

(注,这里安装php的时候posix自动安装了,所以其实我这个环境不需要重新安装posix,这里的ini文件只加入pcntl)

php -m

php7守护进程实现redis订阅发布功能

4、接下来测试代码 http://rango.swoole.com/archives/59

(这个代码链接是借用韩天峰大神的博客上面写的@韩天峰

新建一个fb.php文件,写入下列代码

$pid = pcntl_fork();

       if ($pid == -1){
           die("fork(1) failed!n");
       } elseif ($pid > 0){
           //让由用户启动的进程退出
           exit(0);
       }

       //建立一个有别于终端的新session以脱离终端
  · posix_setsid();

       $pid = pcntl_fork();
       if ($pid == -1){
           die("fork(2) failed!n");
       } elseif ($pid > 0){
           //父进程退出, 剩下子进程成为最终的独立进程
           ini_set('default_socket_timeout', -1);  //不超时
           $redis = new Redis();
           $redis->connect('127.0.0.1', 7200);
           $result=$redis->subscribe(array('event*'), 'callback');

           error_log(var_export(123,true));
           //exit(0);
       }

       function callback($instance,$channelName,$message){
           echo $message;
error_log(var_export( $message,true));
       }

这里自行开启redis服务,并新开一个窗口调试

php7守护进程实现redis订阅发布功能

使用ps -ef | grep fb.php 可以查看进程号

php7守护进程实现redis订阅发布功能

参考:https://zhuanlan.zhihu.com/p/27952601

发表评论

登录后才能评论

评论列表(0条)