资讯专栏INFORMATION COLUMN

利用swoole_process和eventloop实现php异步编程

Code4App / 3194人阅读

摘要:思路很简单开一个子进程处理异步事务,处理完之后,通过管道告诉父进程,并将返回数据写入管道代码如下可以看到运行结果是在前面证明是异步执行的其实通过中的和也可以实现不需要借助但是提供的确实很好用

思路很简单:

开一个子进程处理异步事务,处理完之后,通过管道告诉父进程,并将返回数据写入管道

代码如下:

AsynHttpClient.php

url = $url;
        $this->callback = $callback;
        $this->run();
    }

    public function run()
    {
        $this->process = new swoole_process([$this, "callback"], true); 
        $this->process->start();
        swoole_event_add($this->process->pipe, function($pipe) {
            $content = $this->process->read();
            call_user_func($this->callback, $content);
            swoole_event_del($this->process->pipe);
        });
    }

    public function callback(swoole_process $process)
    {
        $ch = curl_init($this->url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $content = curl_exec($ch);

        curl_close($ch);
        
        $process->write($content);
    }
}

index.php

require "AsynHttpClient.php";

new AsynHttpClient("http://127.0.0.1:9000/api.php", function($data) {
   print_r($data);
});

echo 1;

api.php

 "ok",
  "data" => "hello",
]);
php -S 127.0.0.1:9000

可以看到运行结果是1在前面, 证明是异步执行的.

其实通过php中的pcntl_fork和libevent也可以实现, 不需要借助swoole, 但是swoole提供的process确实很好用

https://www.iwantmoney.cn/art...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22259.html

相关文章

  • 使用 swoole_process 实现 PHP 进程池

    摘要:本文使用与完成一个的进程池,并且支持动态创建新进程。接着遍历所有的进程,并且加入中,设置可读事件,用于接收子进程的空闲信号。最后每隔一秒向进程投递任务。由于只模拟了十次任务,则第十个任务完成之后在父进程中发送使所有子进程退出。 swoole_process 主要是用来代替 PHP 的 pcntl 扩展。我们知道 pcntl 是用来进行多进程编程的,而 pcntl 只提供了 fork 这...

    CrazyCodes 评论0 收藏0
  • 使用 swoole_process 实现 PHP 进程池

    摘要:本文使用与完成一个的进程池,并且支持动态创建新进程。接着遍历所有的进程,并且加入中,设置可读事件,用于接收子进程的空闲信号。最后每隔一秒向进程投递任务。由于只模拟了十次任务,则第十个任务完成之后在父进程中发送使所有子进程退出。 swoole_process 主要是用来代替 PHP 的 pcntl 扩展。我们知道 pcntl 是用来进行多进程编程的,而 pcntl 只提供了 fork 这...

    Andrman 评论0 收藏0
  • PHP异步编程异步的本质

    摘要:实现异步的方式有哪些提供了一些异步方法那它们底层是用哪种方式实现的呢实现异步的方式有线程方式进程方式复用线程方式和进程方式类似有异步请求时开一个线程或者进程获取到数据后线程间可以直接共享数据进程间可以通过进程通信机制,如共享内存管道等方式进 实现异步的方式有哪些? swoole提供了一些异步方法, 那它们底层是用哪种方式实现的呢? 实现异步的方式有: 线程方式 进程方式 IO复用 ...

    lushan 评论0 收藏0
  • PHP多进程系列笔记(五)

    摘要:消息队列更常见的用途是主进程分配任务,子进程消费执行。子进程前面加了个,这是为了防止父进程还未往消息队列中加入内容直接退出。 前面几节都是讲解pcntl扩展实现的多进程程序。本节给大家介绍swoole扩展的swoole_process模块。 swoole多进程 swoole_process 是swoole提供的进程管理模块,用来替代PHP的pcntl扩展。 首先,确保安装的swoole...

    qianfeng 评论0 收藏0
  • Swoole 源码分析——进程管理 Swoole_Process

    摘要:清空主进程残留的定时器与信号。设定为执行回调函数如果在回调函数中调用了异步系统,启动函数进行事件循环。因此为了区分两者,规定并不允许两者同时存在。 前言 swoole-1.7.2 增加了一个进程管理模块,用来替代 PHP 的 pcntl 扩展。 PHP自带的pcntl,存在很多不足,如 pcntl 没有提供进程间通信的功能 pcntl 不支持重定向标准输入和输出 pcntl 只...

    pepperwang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<