旗下导航:搜·么
当前位置:网站首页 > PHP框架 > Swoole > 正文

swoole怎样常驻历程【swoole】,swoole

作者:搜搜PHP网发布时间:2019-12-11分类:Swoole浏览:110


导读:后端常常会有相似如许的场景,某个剧本,须要不停的反复运转,这个时刻,最好有一个保卫顺序,协助我们不停地自动地拉起这些剧本历程,让它自动地反复运转。swoole的历程治...

后端常常会有相似如许的场景,某个剧本,须要不停的反复运转,这个时刻,最好有一个保卫顺序,协助我们不停地自动地拉起这些剧本历程,让它自动地反复运转。

swoole 的历程治理模块就供应了历程间通讯的功用,可以完成对子历程的自动重启功用。在swoole中我们可以经由过程历程保卫完成常驻历程。

要完成对子顺序的保卫,须要做到两点:

1、顺序须要监听到子历程的完毕信号,以便于从新拉起新的子历程。

2、子历程的运转环境须要独立于父历程。

swoole 历程治理模块供应了一个 bool Process->exec(string $execfile, array $args) 要领,让子历程蜕变成另一个体系挪用顺序,同时还能保证父历程与当前历程仍然是父子历程关联。

再经由过程 array Process::wait(bool $blocking = true) 要领,来守候子历程的退出信号。

下面是运用 swoole 启动子历程,并接纳子历程资本的示例代码:

<?phpuse Swoole\Process;

$php = "/usr/bin/env php";
$script = dirname(__DIR__) . "/task.php";
$command = "{$php} {$script}";

$process = new Process(function (Process $worker) use ($command) {
    $worker->exec('/bin/sh', ['-c', $command]);
});
$pid = $process->start();

printf("启动子历程 {$pid}\n");while ($ret = Process::wait()) {
    $pid = intval($ret["pid"] ?? 0);
    printf("子历程 {$pid} 完毕\n");
}

代码剖析:

$command 变量示意须要子历程剧本,经由过程 exec() 要领来启动成一个子历程的体式格局运转,再经由过程 Process::wait() 访求来守候 $command 这个子历程剧本完毕,并接纳历程资本。

那末,只要在收到子历程的完毕信号后,复兴一个雷同的子历程剧本,即可完成对子历程的保卫了。因而,第一个保卫子历程的顺序完成代码:

<?php
use Swoole\Process;

$php = "/usr/bin/env php";
$script = dirname(__DIR__) . "/task.php";
$command = "{$php} {$script}";

do {
    $process = new Process(function (Process $worker) use ($command) {
        $worker->exec('/bin/sh', ['-c', $command]);
    });
    $pid = $process->start();

    printf("启动子历程 {$pid}\n");
} while (Process::wait());

代码剖析:

这段代码只将启动子历程的逻辑加到一个死循环中,好让这个子历程剧本可以不停的重启。

引荐进修: swoole视频教程

以上就是swoole怎样常驻历程的细致内容,更多请关注ki4网别的相干文章!

标签:swoole