博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用swoole_process和eventloop实现php异步编程
阅读量:7194 次
发布时间:2019-06-29

本文共 1067 字,大约阅读时间需要 3 分钟。

思路很简单:

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

代码如下:

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确实很好用

转载地址:http://fuxkm.baihongyu.com/

你可能感兴趣的文章
【BZOJ1475】方格取数 [最小割]
查看>>
数据结构实验9——串
查看>>
iOS - UITableView 编辑(cell的插入, 删除, 移动)
查看>>
log4j 日志分类级别配置
查看>>
40+SublimeText插件
查看>>
swift - 动画学习
查看>>
java 细说String
查看>>
单片机C语言探究--为什么变量最好要赋初值
查看>>
静态库嵌套引用问题
查看>>
spring boot系列(四)spring boot 配置spring data jpa (保存修改删除方法)
查看>>
taro 不支持render中,使用函数多条件渲染
查看>>
Array相关的属性和方法
查看>>
SQL基本用法-行转列
查看>>
LeetCode 265: Paint House II
查看>>
Navicat 远程连接 Oracle11g 数据库报错 No listener 的问题
查看>>
python设计模式之单例模式
查看>>
Flex 布局教程:语法篇
查看>>
JVM内存模型和内存分配学习心得
查看>>
学术家族树典型用户的场景模拟
查看>>
CUDA-GPU编程
查看>>