PRipple协程引擎是一个100%原生PHP代码实现的现代化协程引擎,不依赖任何扩展,
可以在任何PHP环境(FPM/CLI)下运行, 本组件是基于该引擎开发的GuzzleHttp的异步请求插件,
既保留了GuzzleHttp的所有功能(上传/下载等),又支持协程异步请求
PHP
>= 8.1
Linux/Unix
系统
composer require cclilshy/p-ripple-drive
配置
config/server.php
文件
<?php
return [
//...
'event_loop' => \Psc\Drive\Workerman\PDrive::class,
];
//...
Worker::$eventLoop = \Psc\Drive\Workerman\PDrive::class;
public function index(Request $request): string
{
$handle = new \Psc\Plugins\Guzzle\PHandler([
'pool' => 1 // 是否启用Http长连接
]);
$client = new \GuzzleHttp\Client(['handle' => $handle]);
// 发送请求(即使该请求耗时很长, 也不会堵塞当前进程的其他请求)
$response = $client->get('http://www.baidu.com');
return $response->getBody()->getContents();
}
public function index(Request $request): string
{
$client = \P\Plugin::Guzzle();
// 发送请求(即使该请求耗时很长, 也不会堵塞当前进程的其他请求)
$response = $client->get('http://www.baidu.com');
return $response->getBody()->getContents();
}
public function index(Request $request): string
{
for ($i = 0; $i < 100; $i++) {
\P\async(function () use ($i) {
$response = \P\Plugin::Guzzle()->get('https://www.qq.com/');
$time = microtime(true);
$responseStatusCode = $response->getStatusCode();
var_dump("[{$time}]request {$i} status: {$responseStatusCode}");
});
}
return 'hello,world';
}
... 感觉这玩意 出生的有点晚了。 对于耗时的业务流程,现在常规做法都是丢redis队列里面慢慢跑了..不过 感觉这个比队列还是方便些,比如一些保存文件。之类的操作,那就可以直接把保存的路径返回回去 后台这边慢慢保存文件了。 不需要东写一句 西写一句了
我们公司还在用只要有人用就不算晚 嘿嘿,你可以看看这篇 https://p-ripple.cloudtay.com/docs/basic/defer/
不错
不错+1
强
强
请问 安装了扩展,config/server.php 也修改了配置,为什么还是提示async 方法不存在
看一下我上面改了最新代码补充了命名空间
文章写错了
laravel 项目中如何使用呢,要先安装workerman 吗?
可以看看文档有介绍 https://p-ripple.cloudtay.com/docs/install/server
稳定吗
太强了,真是个好东西!
刚才测试的时候,用了之前文章里的:
$response = \P\await(\P\Plugin::Guzzle()->getAsync('https://www.baidu.com'));
不知为何没效果;
另外,
好像缺了很多访问,我用的webman单进程测试的。。
$response = \P\Plugin::Guzzle()->get('https://www.baidu.com'); 直接这样就可以兄弟
嗯,后来我这样写了,但是出现了上图的问题,很多request没有出现
可能是并发高出现的请求错误,try捕获以下看看
试了一下:
没有捕获到异常,仍然是丢了Request,有时能丢个70%左右。。。
设置一个timeout看看
按照guzzle的方式设置就行了
搞定了,确实是Request timeout的问题,谢谢大佬~
另外请问一下这个能用在生产环境吗?
最近在写单元测试,到覆盖率全面那时call你
好的,辛苦,我作为用户来帮忙测试^^
昨天看了文档,可能我比较菜,有些地方不太明白,有群能交流吗?
可以在webman群call我嘿嘿
了解~
上车吧兄弟
已在我个人项目中使用,等你的ORM+协程出来我上正式项目
你好,这个好像发送post 请求接收不到数据,是我使用方式有问题吗
你好,debug一下webman控制器$request的header()和recvBuffer部分看看呢?
这是头部没有自动加入content-length导致的,
已在下个版本解决,详见
https://github.com/cloudtay/p-ripple-core/commit/f9cc669d9eeac09d44b2673a31140ba146470973
现在可以通过这个方式解决1
牛啊,上面那个问题好了,测试发现协程发送超过1000个请求就会失败,进程直接退出
😂正常,系统最大文件描述符拉高一下
有没有什么比较好的办法控制一下并发数量呢
大佬 这玩意 windows系统安装不了呀 扩展没有 哈哈
windows 可以用吗
没有扩展 windows 天生没有多进程扩展哈哈 搜索不到
@tanhongbin 可以用的最新版本已经兼容windows
win10 composer 安装的时候 会让你安装 多进程扩展 然而win php没有 哈哈
--ignore-platform-reqs就可以, 暂时还没移掉这个声明而已
一会试试
跟amp不差不多吗
没错
Error: Call to undefined method Psc\Plugins\Guzzle\Guzzle::get();这里的代码跑不通,更新了.希望大佬可以改下吗?
然后 官网文档是打不开被墙了.希望多些代码例子.